async

async是什么?
说白了就是Generator的语法糖
*换成async,把yield换成await罢了

//Generator写法
const gen = function* () {
  const f1 = yield readFile('/etc/fstab');
  const f2 = yield readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

//async写法
const asyncReadFile = async function () {
  const f1 = await readFile('/etc/fstab');
  const f2 = await readFile('/etc/shells');
  console.log(f1.toString());
  console.log(f2.toString());
};

但他还是有可取之处的

  • 内置执行器
    async函数的执行像普通函数一样,只需要一个括号即可asyncReadFile()不像Generator,需要迭代器,调用next方法才可以执行

  • 更好的语义
    asyncawait,比起星号和yield,语义更清楚了。async表示函数里有异步操作,await表示紧跟在后面的表达式需要等待结果。

  • 更广的适用性。
    co模块约定,yield命令后面只能是 Thunk 函数或 Promise 对象,而async函数的await命令后面,可以是 Promise 对象和原始类型的值(数值、字符串和布尔值,但这时会自动转成立即 resolvedPromise 对象)。

  • 返回值是 Promise
    async函数的返回值是 Promise 对象,这比 Generator 函数的返回值是 Iterator 对象方便多了。你可以用then方法指定下一步的操作。

进一步说,async函数完全可以看作多个异步操作,包装成的一个 Promise 对象,而await命令就是内部then命令的语法糖。

基本用法

async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

下面是一个例子。

async function getStockPriceByName(name) {
  const symbol = await getStockSymbol(name);
  const stockPrice = await getStockPrice(symbol);
  return stockPrice;
}

getStockPriceByName('goog').then(function (result) {
  console.log(result);
});

async 函数有多种使用形式。

// 函数声明
async function foo() {}

// 函数表达式
const foo = async function () {};

// 对象的方法
let obj = { async foo() {} };
obj.foo().then(...)

// Class 的方法
class Storage {
  constructor() {
    this.cachePromise = caches.open('avatars');
  }

  async getAvatar(name) {
    const cache = await this.cachePromise;
    return cache.match(`/avatars/${name}.jpg`);
  }
}

const storage = new Storage();
storage.getAvatar('jake').then(…);

// 箭头函数
const foo = async () => {};

语法

返回 Promise 对象

async函数返回一个 Promise 对象。

async函数内部return语句返回的值,会成为then方法回调函数的参数。

async function f() {
  return 'hello world';
}

f().then(v => console.log(v))
// "hello world"

async函数内部抛出错误,会导致返回的 Promise对象变为reject状态。抛出的错误对象会被catch方法回调函数接收到。

Promise 对象的状态变化

async函数返回的 Promise 对象,必须等到内部所有await命令后面的 Promise 对象执行完,才会发生状态改变,除非遇到return语句或者抛出错误。也就是说,只有async函数内部的异步操作执行完,才会执行then方法指定的回调函数。

下面是一个例子。

async function getTitle(url) {
  let response = await fetch(url);
  let html = await response.text();
  return html.match(/([\s\S]+)<\/title>/i)[1];
}
getTitle('https://tc39.github.io/ecma262/').then(console.log)
// "ECMAScript 2017 Language Specification"
</code></pre> 
   <p>上面代码中,函数getTitle内部有三个操作:抓取网页、取出文本、匹配页面标题。只有这三个操作全部完成,才会执行then方法里面的console.log。</p> 
   <h5>await命令</h5> 
   <p>正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果。如果不是 Promise 对象,就直接返回对应的值。</p> 
   <pre><code>async function f() {
  // 等同于
  // return 123;
  return await 123;
}

f().then(v => console.log(v))
// 123
</code></pre> 
   <p>上面代码中,await命令的参数是数值123,这时等同于return 123。</p> 
   <p>另一种情况是,await命令后面是一个thenable对象(即定义then方法的对象),那么await会将其等同于 Promise 对象。</p> 
   <pre><code>class Sleep {
  constructor(timeout) {
    this.timeout = timeout;
  }
  then(resolve, reject) {
    const startTime = Date.now();
    setTimeout(
      () => resolve(Date.now() - startTime),
      this.timeout
    );
  }
}

(async () => {
  const sleepTime = await new Sleep(1000);
  console.log(sleepTime);
})();
// 1000
</code></pre> 
   <p>上面代码中,await命令后面是一个Sleep对象的实例。这个实例不是 Promise 对象,但是因为定义了then方法,await会将其视为Promise处理。</p> 
   <p>这个例子还演示了如何实现休眠效果。JavaScript 一直没有休眠的语法,但是借助<code>await</code>命令就可以让程序停顿指定的时间。</p> 
   <pre><code>function sleep(interval) {
  return new Promise(resolve => {
    setTimeout(resolve, interval);
  })
}

// 用法
async function one2FiveInAsync() {
  for(let i = 1; i <= 5; i++) {
    console.log(i);
    await sleep(1000);
  }
}

one2FiveInAsync();
</code></pre> 
   <p>其中for循环也会延缓执行<br> await命令后面的 Promise 对象如果变为reject状态,则reject的参数会被catch方法的回调函数接收到。</p> 
   <p>任何一个await语句后面的 Promise 对象变为reject状态,那么整个async函数都会中断执行。</p> 
   <pre><code>async function f() {
  await Promise.reject('出错了');
  await Promise.resolve('hello world'); // 不会执行
}
</code></pre> 
   <p>有时,我们希望即使前一个异步操作失败,也不要中断后面的异步操作。这时可以将第一个<code>await</code>放在<code>try...catch</code>结构里面,这样不管这个异步操作是否成功,第二个<code>await</code>都会执行。<br> 另一种方法是await后面的 Promise 对象再跟一个catch方法,处理前面可能出现的错误。</p> 
   <pre><code>async function f() {
  await Promise.reject('出错了')
    .catch(e => console.log(e));
  return await Promise.resolve('hello world');
}

f()
.then(v => console.log(v))
// 出错了
// hello world
</code></pre> 
   <h5>注意点</h5> 
   <ul> 
    <li>await命令后面的Promise对象,运行结果可能是rejected,所以最好把await命令放在try...catch代码块中。</li> 
   </ul> 
   <pre><code>async function myFunction() {
  try {
    await somethingThatReturnsAPromise();
  } catch (err) {
    console.log(err);
  }
}

// 另一种写法

async function myFunction() {
  await somethingThatReturnsAPromise()
  .catch(function (err) {
    console.log(err);
  });
}
</code></pre> 
   <ul> 
    <li>多个await命令后面的异步操作,如果不存在继发关系,最好让它们同时触发。</li> 
   </ul> 
   <pre><code>// 写法一
let [foo, bar] = await Promise.all([getFoo(), getBar()]);

// 写法二
let fooPromise = getFoo();
let barPromise = getBar();
let foo = await fooPromise;
let bar = await barPromise;
</code></pre> 
   <ul> 
    <li>await命令只能用在async函数之中,如果用在普通函数,就会报错。<br> 有时把普通函数改写成async函数也会报错。比如forEach</li> 
   </ul> 
   <pre><code>function dbFuc(db) { //这里不需要 async
  let docs = [{}, {}, {}];

  // 可能得到错误结果
  docs.forEach(async function (doc) {
    await db.post(doc);
  });
}
</code></pre> 
   <p>上面代码可能不会正常工作,原因是这时三个db.post操作将是并发执行,也就是同时执行,而不是继发执行。正确的写法是采用for循环。</p> 
   <pre><code>async function dbFuc(db) {
  let docs = [{}, {}, {}];

  for (let doc of docs) {
    await db.post(doc);
  }
}
</code></pre> 
   <ul> 
    <li>async 函数可以保留运行堆栈。</li> 
   </ul> 
   <pre><code>const a = () => {
  b().then(() => c());
};
</code></pre> 
   <p>上面代码中,函数a内部运行了一个异步任务b()。当b()运行的时候,函数a()不会中断,而是继续执行。等到b()运行结束,可能a()早就运行结束了,b()所在的上下文环境已经消失了。如果b()或c()报错,错误堆栈将不包括a()。</p> 
   <p>现在将这个例子改成async函数。</p> 
   <pre><code>const a = async () => {
  await b();
  c();
};
</code></pre> 
   <h5>async函数的实现原理</h5> 
   <p>将 Generator 函数和自动执行器,包装在一个函数里。<br> 手写await?</p> 
   <pre><code>function spawn(genF) {
  return new Promise(function(resolve, reject) {
    const gen = genF();
    function step(nextF) {
      let next;
      try {
        next = nextF();
      } catch(e) {
        return reject(e);
      }
      if(next.done) {
        return resolve(next.value);
      }
      Promise.resolve(next.value).then(function(v) {
        step(function() { return gen.next(v); });
      }, function(e) {
        step(function() { return gen.throw(e); });
      });
    }
    step(function() { return gen.next(undefined); });
  });
}
</code></pre> 
   <h5>异步加载模块</h5> 
   <pre><code>// awaiting.js
const dynamic = import(someMission);
const data = fetch(url);
export const output = someProcess((await dynamic).default, await data);
</code></pre> 
   <p>上面代码中,两个异步操作在输出的时候,都加上了await命令。只有等到异步操作完成,这个模块才会输出值。</p> 
   <p>加载这个模块的写法如下。</p> 
   <pre><code>// usage.js
import { output } from "./awaiting.js";
function outputPlusValue(value) { return output + value }

console.log(outputPlusValue(100));
setTimeout(() => console.log(outputPlusValue(100), 1000);
</code></pre> 
  </div> 
 </div> 
</div>
                            </div>
                        </div>
                    </div>
                    <!--PC和WAP自适应版-->
                    <div id="SOHUCS" sid="1280841606836011008"></div>
                    <script type="text/javascript" src="/views/front/js/chanyan.js"></script>
                    <!-- 文章页-底部 动态广告位 -->
                    <div class="youdao-fixed-ad" id="detail_ad_bottom"></div>
                </div>
                <div class="col-md-3">
                    <div class="row" id="ad">
                        <!-- 文章页-右侧1 动态广告位 -->
                        <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_1"> </div>
                        </div>
                        <!-- 文章页-右侧2 动态广告位 -->
                        <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_2"></div>
                        </div>
                        <!-- 文章页-右侧3 动态广告位 -->
                        <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad">
                            <div class="youdao-fixed-ad" id="detail_ad_3"></div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <div class="container">
        <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(async)</h4>
        <div id="paradigm-article-related">
            <div class="recommend-post mb30">
                <ul class="widget-links">
                    <li><a href="/article/1835475582138281984.htm"
                           title="ios GCD" target="_blank">ios GCD</a>
                        <span class="text-muted">_Waiting_</span>

                        <div>1.GCD任务和队列学习GCD之前,先来了解GCD中两个核心概念:任务和队列。任务:就是执行操作的意思,换句话说就是你在线程中执行的那段代码。在GCD中是放在block中的。执行任务有两种方式:同步执行(sync)和异步执行(async)。两者的主要区别是:是否等待队列的任务执行结束,以及是否具备开启新线程的能力。同步执行(sync):同步添加任务到指定的队列中,在添加的任务执行结束之前,会一直等</div>
                    </li>
                    <li><a href="/article/1835394030880518144.htm"
                           title="HarmonyOS Next鸿蒙扫一扫功能实现" target="_blank">HarmonyOS Next鸿蒙扫一扫功能实现</a>
                        <span class="text-muted">JohnLiu_</span>
<a class="tag" taget="_blank" href="/search/HarmonyOS/1.htm">HarmonyOS</a><a class="tag" taget="_blank" href="/search/Next/1.htm">Next</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E5%8D%8E%E4%B8%BA/1.htm">华为</a><a class="tag" taget="_blank" href="/search/%E6%89%AB%E4%B8%80%E6%89%AB/1.htm">扫一扫</a><a class="tag" taget="_blank" href="/search/%E9%B8%BF%E8%92%99/1.htm">鸿蒙</a>
                        <div>直接使用的是华为官方提供的api,封装成一个工具类方便调用。import{common}from'@kit.AbilityKit';import{scanBarcode,scanCore}from'@kit.ScanKit';exportnamespaceScanUtil{exportasyncfunctionstartScan(context:common.Context):Promise{if</div>
                    </li>
                    <li><a href="/article/1835292366022471680.htm"
                           title="美团一面" target="_blank">美团一面</a>
                        <span class="text-muted">Redstone Monstrosity</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a>
                        <div>1.为什么代码输出顺序是这样的?请尽可能详细地解释原理和过程。asyncfunctionasync1(){console.log('async1start');awaitasync2();console.log('async1end')}asyncfunctionasync2(){console.log('async2')}console.log('scriptstart');async1();c</div>
                    </li>
                    <li><a href="/article/1835278504103604224.htm"
                           title="Spring @Async 深度解读:默认线程池执行器的配置与优化" target="_blank">Spring @Async 深度解读:默认线程池执行器的配置与优化</a>
                        <span class="text-muted">小码快撩</span>
<a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>在Spring中,@Async注解用于异步执行方法。默认情况下,@Async注解的任务是由一个线程池执行的。然而,这个默认的线程池是如何初始化的呢?本文将深入探讨这一过程,帮助你理解Spring异步任务背后的线程池执行器的初始化原理。1.@Async的基本使用首先,让我们快速回顾一下@Async的基本用法。@Async通常用于标注在需要异步执行的方法上,比如:@Servicepublicclass</div>
                    </li>
                    <li><a href="/article/1835103990602362880.htm"
                           title="java ajax_Java Ajax入门" target="_blank">java ajax_Java Ajax入门</a>
                        <span class="text-muted">孤独患喆</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a>
                        <div>接下来整理一下Ajax相关的内容,AJAX(asynchronousjsandxml),即异步的JavaScript和xml,它的主要作用就是让页面不必等待服务器返回整个页面信息,而可以通过异步的方式给服务器发送数据和获取数据,对页面进行局部刷新,是一种提高用户体验的技术。同步和异步同步和异步的主要区别如下;(1)同步:一个响应结束后才能发送下一个请求,页面在请求期间不能做其他事情。(2)异步:不</div>
                    </li>
                    <li><a href="/article/1835024946754056192.htm"
                           title="ajax讲解" target="_blank">ajax讲解</a>
                        <span class="text-muted">夜不眠,码三千</span>
<a class="tag" taget="_blank" href="/search/okhttp/1.htm">okhttp</a>
                        <div>1.AJAX概述1.1什么是ajaxAJAX(AsynchronousJavascriptAndXML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。AJAX还有一个最大的特点就是,当服务器响应时,不用刷新整个浏览器页面,而是可以局部刷新。这一特点给用户的感受是在不知不觉中完成请求和响应过</div>
                    </li>
                    <li><a href="/article/1834955589327876096.htm"
                           title="C++多线程的简单使用" target="_blank">C++多线程的简单使用</a>
                        <span class="text-muted">好学松鼠</span>
<a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a><a class="tag" taget="_blank" href="/search/C%2B%2B%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">C++多线程</a><a class="tag" taget="_blank" href="/search/async/1.htm">async</a><a class="tag" taget="_blank" href="/search/promise/1.htm">promise</a>
                        <div>多线程的使用,本文主要简单介绍使用多线程的几种方式,并使用几个简单的例子来介绍多线程,使用编译器为visualstudio。一、AsyncFuture使用的知识点有std::async和std::future1、std::async函数原型templatefuture::type>async(launchpolicy,Fn&&fn,Args&&...args);功能:第二个参数接收一个可调用对象(</div>
                    </li>
                    <li><a href="/article/1834932274618003456.htm"
                           title="深入理解Webpack核心模块Tapable钩子[异步版]" target="_blank">深入理解Webpack核心模块Tapable钩子[异步版]</a>
                        <span class="text-muted">weixin_34413802</span>
<a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/ViewUI/1.htm">ViewUI</a>
                        <div>接上一篇文章深入理解Webpack核心模块WTApable钩子(同步版)tapable中三个注册方法1tap(同步)2tapAsync(cb)3tapPromise(注册的是Promise)tapable中对三个触发方法1call2callAsync3promise这一章节我们将分别实现异步的Async版本和Promise版本异步钩子AsyncParallelHookAsyncParallelHo</div>
                    </li>
                    <li><a href="/article/1834925082288418816.htm"
                           title="四、webpack4.0 - tapable" target="_blank">四、webpack4.0 - tapable</a>
                        <span class="text-muted">Razas</span>
<a class="tag" taget="_blank" href="/search/WEBPACK4/1.htm">WEBPACK4</a><a class="tag" taget="_blank" href="/search/webpack4.0/1.htm">webpack4.0</a>
                        <div>一、tapable介绍webpack中插件的时候,需要用到tapable。新建一个项目WEBPACK-Tapable。初始化package.json:npminit-y安装:npminstalltapable--savetapable是一个包。二、tapable三、AsyncParralleHook四、AsyncSeriesHook五、AsyncSeriesWaterfall</div>
                    </li>
                    <li><a href="/article/1834922686216761344.htm"
                           title="tapable详解" target="_blank">tapable详解</a>
                        <span class="text-muted">风火一回</span>
<a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/tapable/1.htm">tapable</a><a class="tag" taget="_blank" href="/search/webpack/1.htm">webpack</a><a class="tag" taget="_blank" href="/search/%E6%8F%92%E4%BB%B6%E5%88%B6%E4%BD%9C/1.htm">插件制作</a>
                        <div>tapable详解tapable是webpack内部使用的一个流程管理工具,主要用来串联插件,完善事件流执行。1.安装tapableyarnaddtapable2.常用hooksimport{SyncHook,SyncBailHook,SyncWaterfallHook,SyncLoopHook,AsyncParallelHook,AsyncParallelBailHook,AsyncSeries</div>
                    </li>
                    <li><a href="/article/1834780499281801216.htm"
                           title="解锁网页交互利器:深入浅出 AJAX,用 JavaScript 与后端服务器对话,局部请求刷新数据" target="_blank">解锁网页交互利器:深入浅出 AJAX,用 JavaScript 与后端服务器对话,局部请求刷新数据</a>
                        <span class="text-muted">微特尔普拉斯</span>
<a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/ajax/1.htm">ajax</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>在当今互联网时代,网页早已不再是静态的信息展示平台,而是充满动态交互的应用体验场。而实现这种流畅交互体验的关键技术之一,便是AJAX(AsynchronousJavaScriptandXML)。它允许网页在后台悄无声息地与服务器交换数据,无需刷新整个页面,便可实现内容的动态更新,为用户带来行云流水般的操作体验。在AJAX出现之前,网页开发采用的是前后端不分离的模式。前端开发者编写好HTML和CSS</div>
                    </li>
                    <li><a href="/article/1834766255463165952.htm"
                           title="DMA与AXI DMA ip" target="_blank">DMA与AXI DMA ip</a>
                        <span class="text-muted">光之大主宰</span>
<a class="tag" taget="_blank" href="/search/FPGA/1.htm">FPGA</a><a class="tag" taget="_blank" href="/search/fpga%E5%BC%80%E5%8F%91/1.htm">fpga开发</a><a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E6%9E%B6%E6%9E%84/1.htm">硬件架构</a><a class="tag" taget="_blank" href="/search/%E7%A1%AC%E4%BB%B6%E5%B7%A5%E7%A8%8B/1.htm">硬件工程</a><a class="tag" taget="_blank" href="/search/%E9%A9%B1%E5%8A%A8%E5%BC%80%E5%8F%91/1.htm">驱动开发</a>
                        <div>文章目录AXIDMAReadChannel(读通道)WriteChannel(写通道)#其他选项ScatterGatherEngine特点工作流程AXIDMA配置项说明ComponentName(axi_dma)DMA组件的名称,可以自定义。EnableAsynchronousClocks允许DMA在不同时钟域之间工作,适用于不同频率的模块。EnableScatterGatherEngine启用S</div>
                    </li>
                    <li><a href="/article/1834727553160540160.htm"
                           title="WPF中图片的宫格显示" target="_blank">WPF中图片的宫格显示</a>
                        <span class="text-muted">Vae_Mars</span>
<a class="tag" taget="_blank" href="/search/WPF-AI%E5%AF%B9%E8%AF%9D/1.htm">WPF-AI对话</a><a class="tag" taget="_blank" href="/search/wpf/1.htm">wpf</a>
                        <div>1.解释说明-使用ScrollViewer控件来达到滑动的效果-使用WrapPanel的自动换行特性,保证图片在占满横向空间后自动往下排布-使用foreach的方法来游历所有的图片url2.xaml代码示例3.cs代码示例//加载url转换成BitmapImageprivateasyncTaskLoadImageFromUrl(stringurl){try{using(HttpClientclie</div>
                    </li>
                    <li><a href="/article/1834640953080639488.htm"
                           title="说说你对koa中洋葱模型的理解?" target="_blank">说说你对koa中洋葱模型的理解?</a>
                        <span class="text-muted">J轩</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a>
                        <div>什么是koa?Koa是一个精简的node框架,被认为是第二代Node框架,其最大的特点就是独特的中间件流程控制,是一个典型的洋葱模型,它的核心工作包括下面两个方面:1.将node原生的req和res封装成为一个context对象。2.基于async/await的中间件洋葱模型机制。Koa1和Koa2在源码上的区别有何不同?Koa1是使用generator、yield的模式。Koa2使用的是asyn</div>
                    </li>
                    <li><a href="/article/1834637800536895488.htm"
                           title="koa2 洋葱模型" target="_blank">koa2 洋葱模型</a>
                        <span class="text-muted">gaearon</span>
<a class="tag" taget="_blank" href="/search/koa2/1.htm">koa2</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/nodejs/1.htm">nodejs</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a><a class="tag" taget="_blank" href="/search/koa2/1.htm">koa2</a>
                        <div>示意图koa2是基于async和await实现的,使用next进行流程控制。这样就可以使用awaitnext()进行一种特殊的执行顺序,等下一个路由执行完毕之后,再执行当前路由,通常称为“洋葱模型”。何谓“洋葱模型”就像那首歌一样,“一层一层剥开我的心”,koa2中的“洋葱模型”也是这样,匹配到的路由,可以一层一层进去,进入最内层之后,再一层一层出来。例如这个demo:api.get("/",as</div>
                    </li>
                    <li><a href="/article/1834428576376647680.htm"
                           title="STM32与ESP8266的使用" target="_blank">STM32与ESP8266的使用</a>
                        <span class="text-muted">每天的积累</span>
<a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E5%AD%A6%E4%B9%A0%E6%97%A5%E8%AE%B0/1.htm">嵌入式学习日记</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/stm32/1.htm">stm32</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E7%89%87%E6%9C%BA/1.htm">单片机</a><a class="tag" taget="_blank" href="/search/%E5%B5%8C%E5%85%A5%E5%BC%8F%E7%A1%AC%E4%BB%B6/1.htm">嵌入式硬件</a>
                        <div>串口透传“透传”通常指的是数据的透明传输,意思是在不对数据进行任何处理或修改的情况下,将数据从一个接口转发到另一个接口。值得注意的是要避免串口之间无限制的透明,可以采用互斥锁的方式进行限制使用方法对USART1和USART3(用他俩举例)的模式都是设置为Asynchronous,并开启对应的中断。RCC的HighSPeedCLock模式设置为Crystal/Ceramic配置对应的时钟为64Mhz</div>
                    </li>
                    <li><a href="/article/1834414839448039424.htm"
                           title="ReactNative SDK 库之 react-native-dev-sdk" target="_blank">ReactNative SDK 库之 react-native-dev-sdk</a>
                        <span class="text-muted">执念1012</span>
<a class="tag" taget="_blank" href="/search/react/1.htm">react</a><a class="tag" taget="_blank" href="/search/native/1.htm">native</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>react-native-dev-sdk封装大部业务中常用组件,方法、方便项目中适用安装依赖使用,安装需要将dev嵌入项目.npmi@react-native-async-storage/async-storage@react-navigation/nativeaxiosreact-native-root-toast@react-navigation/native-stack@react-navi</div>
                    </li>
                    <li><a href="/article/1834370970375254016.htm"
                           title="3.1、前端异步编程(超详细手写实现Promise;实现all、race、allSettled、any;async/await的使用)" target="_blank">3.1、前端异步编程(超详细手写实现Promise;实现all、race、allSettled、any;async/await的使用)</a>
                        <span class="text-muted">lin-lins</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E9%AB%98%E7%BA%A7/1.htm">高级</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a>
                        <div>前端异步编程规范Promise介绍手写Promise(resolve,reject)手写Promise(then)Promise相关API实现allraceallSettledanyasync/await和Promise的关系async/await的使用Promise介绍Promise是一个类,可以翻译为承诺、期约Promise就像一个容器,里面存放着未来才会结束,返回结果的容器,返回的结果只需要</div>
                    </li>
                    <li><a href="/article/1834317626067742720.htm"
                           title="python并发与并行(十一) ———— 让asyncio的事件循环保持畅通,以便进一步提升程序的响应能力" target="_blank">python并发与并行(十一) ———— 让asyncio的事件循环保持畅通,以便进一步提升程序的响应能力</a>
                        <span class="text-muted">bug404_</span>
<a class="tag" taget="_blank" href="/search/python%E5%B9%B6%E5%8F%91%E4%B8%8E%E5%B9%B6%E8%A1%8C/1.htm">python并发与并行</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>前一篇blog说明了怎样把采用线程所实现的项目逐步迁移到asyncio方案上面。迁移后的run_tasks协程,可以将多份输入文件通过tail_async协程正确地合并成一份输出文件。importasyncio#OnWindows,aProactorEventLoopcan'tbecreatedwithin#threadsbecauseittriestoregistersignalhandlers</div>
                    </li>
                    <li><a href="/article/1834140215099355136.htm"
                           title="vue动态引入组件" target="_blank">vue动态引入组件</a>
                        <span class="text-muted">Gaochengxin</span>

                        <div>defineAsyncComponent()定义一个异步组件,它在运行时是懒加载的。参数可以是一个异步加载函数,或是对加载行为进行更具体定制的一个选项对象。在大型项目中,我们可能需要拆分应用为更小的块,并仅在需要时再从服务器加载相关组件。Vue提供了defineAsyncComponent方法来实现此功能:import{defineAsyncComponent}from'vue'computed:</div>
                    </li>
                    <li><a href="/article/1834056834823057408.htm"
                           title="react 全局状态管理 redux的使用" target="_blank">react 全局状态管理 redux的使用</a>
                        <span class="text-muted">小刘的代码仓库</span>
<a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a>
                        <div>redux为全局状态管理类似vuex目录redux官网一、安装npminstallredux二、创建三、修改四、接受五、拆分、合并六、异步处理redux-thunk的使用七、redux-promise的使用八、async和await九、react-redux的使用十、修改soter的属性值十一、异步的完整代码redux官网入门Redux|Redux中文官网一、安装npminstallredux二、</div>
                    </li>
                    <li><a href="/article/1834004030435717120.htm"
                           title="vue引用项目文件(md、json等)" target="_blank">vue引用项目文件(md、json等)</a>
                        <span class="text-muted">天高任鸟飞dyz</span>
<a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>文件放到public文件夹下例:base:/maas/docs/ui/importaxiosfrom'axios'constfetchMarkdown=async(node)=>{//import(`/maas/docs/ui/目录${node.url}?raw`).then((res)=>{//previewMd.value=res.default////console.log(res.defa</div>
                    </li>
                    <li><a href="/article/1833899249880887296.htm"
                           title="VUE3学习路线" target="_blank">VUE3学习路线</a>
                        <span class="text-muted">蜡笔小新星</span>
<a class="tag" taget="_blank" href="/search/Vue/1.htm">Vue</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a>
                        <div>以下是一份详细的Vue3学习路线,涵盖从基础到进阶的各个方面,以帮助你系统掌握Vue3开发。第一阶段:基础知识理解前端基础HTML:了解文档结构,常用标签,语义化HTML。CSS:学习选择器、布局、Flexbox和Grid,基本的样式应用。JavaScript:理解基本语法、DOM操作、事件处理、异步编程(Promises,async/await),以及ES6+特性(如箭头函数、解构赋值、模块化)</div>
                    </li>
                    <li><a href="/article/1833869873374130176.htm"
                           title="题解 | #字符统计#hashmap + treeset" target="_blank">题解 | #字符统计#hashmap + treeset</a>
                        <span class="text-muted">2301_79125642</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                        <div>双非简历求拷打,秋招够用吗#我的简历长这样##最后再改一次简历#async/await的用途和工作原理async/await是ES8(ES2017)引入的一种用于处理异步操作的语法,它建立在ProVue中组件传值的方式Vue中组件传值的方式主要有以下几种:https://www.nowcoder.com/issue异步编程?异步编程是一种编程模式,用于处理可能会花费较长时间的操作,而不会阻塞其他代</div>
                    </li>
                    <li><a href="/article/1833707106495197184.htm"
                           title="Vue3异步请求的最佳实践:async/await 与 Promise.then(),Vue3请求接口数据,以及TypeScript中的泛型和任意类型(Vue3请求API,TS中的T 和 any)" target="_blank">Vue3异步请求的最佳实践:async/await 与 Promise.then(),Vue3请求接口数据,以及TypeScript中的泛型和任意类型(Vue3请求API,TS中的T 和 any)</a>
                        <span class="text-muted">北城笑笑</span>
<a class="tag" taget="_blank" href="/search/VueJS/1.htm">VueJS</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a>
                        <div>前言在Vue3开发中,异步请求是非常常见的操作,特别是在与后端API交互时。虽然Vue.js自带了一些对异步数据的处理方式,但合理使用异步操作是确保应用顺畅运行的关键。这里我分享一下Vue3异步请求的最佳实践,并探讨async/await和Promise.then()两种处理异步操作的方式,简单记录一下1.请求接口的实现这里,我们使用一个请求接口callAskRecordList,它会从/gpt/</div>
                    </li>
                    <li><a href="/article/1833604983224889344.htm"
                           title="apollo事件通信机制" target="_blank">apollo事件通信机制</a>
                        <span class="text-muted">XuSheng.Mrs</span>
<a class="tag" taget="_blank" href="/search/APOLLO/1.htm">APOLLO</a><a class="tag" taget="_blank" href="/search/Apollo/1.htm">Apollo</a><a class="tag" taget="_blank" href="/search/perception/1.htm">perception</a><a class="tag" taget="_blank" href="/search/shared/1.htm">shared</a><a class="tag" taget="_blank" href="/search/data/1.htm">data</a>
                        <div>我目前用的是基于ros版本的apollo,在apollo内部有两种消息传输机制,一种是基于ros的回调函数的订阅来实现各个模块之间的数据通信,还有一种就是事件的通信机制,主要用于感知模块内部的通信,这种通信是基于进程间的内存共享来实现消息的传递.下面我主要介绍第二种消息传递的方式:先看一下事件的实际应用发布事件:voidAsyncFusionSubnode::PublishDataAndEvent</div>
                    </li>
                    <li><a href="/article/1833481817437597696.htm"
                           title="Promise、async/await 的使用" target="_blank">Promise、async/await 的使用</a>
                        <span class="text-muted">渡鸦七</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a>
                        <div>Promise、async/await的使用目录Promiseasync/awaitPromise什么是Promise?Promise是异步编程的一种解决方案,它代表了一个异步操作的最终结果。它是一个对象,用来传递异步操作的消息,而不是直接传递结果。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理,并提供统一的接口。Promise也有三种状态:Pending(等待中):初始状</div>
                    </li>
                    <li><a href="/article/1833398714086027264.htm"
                           title="vue-element根据后端返回的值,在表格内生成二维码并且下载" target="_blank">vue-element根据后端返回的值,在表格内生成二维码并且下载</a>
                        <span class="text-muted">爬坑的小白</span>
<a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/chrome/1.htm">chrome</a>
                        <div>1:安装qrcodenpmiqrcode2:引入qrcodeimportQRCodefrom'qrcode'3:页面下载4:方法//封装方法生产二维码asyncgetCode(data){console.log(data,';;;')try{constdataSting=data.toString()constqrCodeData=awaitQRCode.toDataURL(dataSting)r</div>
                    </li>
                    <li><a href="/article/1833335196221534208.htm"
                           title="python 一个命令行的聊天服务器" target="_blank">python 一个命令行的聊天服务器</a>
                        <span class="text-muted">Kw!G</span>
<a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a>
                        <div>使用telnet连接可以连接成功,但是客户端发送消息就会报类型不匹配的错byte和str不匹配,这个错我实在找不到怎么改如果有大佬知道,请告知我,谢谢!解决了collect_incoming_data传来的参数data是byte类型的,需要用decode转换#异步套接字fromasyncoreimportdispatcherfromasynchatimportasync_chatimportsoc</div>
                    </li>
                    <li><a href="/article/1833240176151851008.htm"
                           title="async/await" target="_blank">async/await</a>
                        <span class="text-muted">隔壁老王z</span>

                        <div>在async/await之前的三种写回调的方式:1、嵌套回调2、以Promise为主的链式回调3、使用Generators但是,这三种写起来都不够优雅,ES7做了优化改进,async/await应运而生,async/await相比较Promise对象then函数的嵌套,与Generator执行的繁琐(需要借助go才能自动执行,否则得手动调用next()),Async/Await可以让你轻松写出同步</div>
                    </li>
                                <li><a href="/article/76.htm"
                                       title="遍历dom 并且存储(将每一层的DOM元素存在数组中)" target="_blank">遍历dom 并且存储(将每一层的DOM元素存在数组中)</a>
                                    <span class="text-muted">换个号韩国红果果</span>
<a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a>
                                    <div>数组从0开始!! 
 


var a=[],i=0;
for(var j=0;j<30;j++){
		a[j]=[];//数组里套数组,且第i层存储在第a[i]中
	}

function walkDOM(n){
	
			do{
			if(n.nodeType!==3)//筛选去除#text类型

			a[i].push(n);
			
			//con</div>
                                </li>
                                <li><a href="/article/203.htm"
                                       title="Android+Jquery Mobile学习系列(9)-总结和代码分享" target="_blank">Android+Jquery Mobile学习系列(9)-总结和代码分享</a>
                                    <span class="text-muted">白糖_</span>
<a class="tag" taget="_blank" href="/search/JQuery+Mobile/1.htm">JQuery Mobile</a>
                                    <div>目录导航 
  
经过一个多月的边学习边练手,学会了Android基于Web开发的毛皮,其实开发过程中用Android原生API不是很多,更多的是HTML/Javascript/Css。 
  
个人觉得基于WebView的Jquery Mobile开发有以下优点: 
1、对于刚从Java Web转型过来的同学非常适合,只要懂得HTML开发就可以上手做事。 
2、jquerym</div>
                                </li>
                                <li><a href="/article/330.htm"
                                       title="impala参考资料" target="_blank">impala参考资料</a>
                                    <span class="text-muted">dayutianfei</span>
<a class="tag" taget="_blank" href="/search/impala/1.htm">impala</a>
                                    <div>记录一些有用的Impala资料 
  
1. 入门资料 
>>官网翻译: 
    http://my.oschina.net/weiqingbin/blog?catalog=423691 
  
2. 实用进阶 
>>代码&架构分析: 
    Impala/Hive现状分析与前景展望:http</div>
                                </li>
                                <li><a href="/article/457.htm"
                                       title="JAVA 静态变量与非静态变量初始化顺序之新解" target="_blank">JAVA 静态变量与非静态变量初始化顺序之新解</a>
                                    <span class="text-muted">周凡杨</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E9%9D%99%E6%80%81/1.htm">静态</a><a class="tag" taget="_blank" href="/search/%E9%9D%9E%E9%9D%99%E6%80%81/1.htm">非静态</a><a class="tag" taget="_blank" href="/search/%E9%A1%BA%E5%BA%8F/1.htm">顺序</a>
                                    <div>今天和同事争论一问题,关于静态变量与非静态变量的初始化顺序,谁先谁后,最终想整理出来!测试代码: 
import java.util.Map;

public class T {

	public static T t = new T();
	private Map map = new HashMap();
	public T(){
		System.out.println(&quo</div>
                                </li>
                                <li><a href="/article/584.htm"
                                       title="跳出iframe返回外层页面" target="_blank">跳出iframe返回外层页面</a>
                                    <span class="text-muted">g21121</span>
<a class="tag" taget="_blank" href="/search/iframe/1.htm">iframe</a>
                                    <div>在web开发过程中难免要用到iframe,但当连接超时或跳转到公共页面时就会出现超时页面显示在iframe中,这时我们就需要跳出这个iframe到达一个公共页面去。 
首先跳转到一个中间页,这个页面用于判断是否在iframe中,在页面加载的过程中调用如下代码: 
<script type="text/javascript">
//<!--
function</div>
                                </li>
                                <li><a href="/article/711.htm"
                                       title="JAVA多线程监听JMS、MQ队列" target="_blank">JAVA多线程监听JMS、MQ队列</a>
                                    <span class="text-muted">510888780</span>
<a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a>
                                    <div>背景:消息队列中有非常多的消息需要处理,并且监听器onMessage()方法中的业务逻辑也相对比较复杂,为了加快队列消息的读取、处理速度。可以通过加快读取速度和加快处理速度来考虑。因此从这两个方面都使用多线程来处理。对于消息处理的业务处理逻辑用线程池来做。对于加快消息监听读取速度可以使用1.使用多个监听器监听一个队列;2.使用一个监听器开启多线程监听。 
对于上面提到的方法2使用一个监听器开启多线</div>
                                </li>
                                <li><a href="/article/838.htm"
                                       title="第一个SpringMvc例子" target="_blank">第一个SpringMvc例子</a>
                                    <span class="text-muted">布衣凌宇</span>
<a class="tag" taget="_blank" href="/search/spring+mvc/1.htm">spring mvc</a>
                                    <div>第一步:导入需要的包; 
第二步:配置web.xml文件 
 
<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.5" 
 xmlns="http://java.sun.com/xml/ns/javaee" 
 xmlns:xsi=</div>
                                </li>
                                <li><a href="/article/965.htm"
                                       title="我的spring学习笔记15-容器扩展点之PropertyOverrideConfigurer" target="_blank">我的spring学习笔记15-容器扩展点之PropertyOverrideConfigurer</a>
                                    <span class="text-muted">aijuans</span>
<a class="tag" taget="_blank" href="/search/Spring3/1.htm">Spring3</a>
                                    <div>PropertyOverrideConfigurer类似于PropertyPlaceholderConfigurer,但是与后者相比,前者对于bean属性可以有缺省值或者根本没有值。也就是说如果properties文件中没有某个bean属性的内容,那么将使用上下文(配置的xml文件)中相应定义的值。如果properties文件中有bean属性的内容,那么就用properties文件中的值来代替上下</div>
                                </li>
                                <li><a href="/article/1092.htm"
                                       title="通过XSD验证XML" target="_blank">通过XSD验证XML</a>
                                    <span class="text-muted">antlove</span>
<a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/schema/1.htm">schema</a><a class="tag" taget="_blank" href="/search/xsd/1.htm">xsd</a><a class="tag" taget="_blank" href="/search/validation/1.htm">validation</a><a class="tag" taget="_blank" href="/search/SchemaFactory/1.htm">SchemaFactory</a>
                                    <div>1. XmlValidation.java 
package xml.validation;

import java.io.InputStream;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schem</div>
                                </li>
                                <li><a href="/article/1219.htm"
                                       title="文本流与字符集" target="_blank">文本流与字符集</a>
                                    <span class="text-muted">百合不是茶</span>
<a class="tag" taget="_blank" href="/search/PrintWrite%28%29%E7%9A%84%E4%BD%BF%E7%94%A8/1.htm">PrintWrite()的使用</a><a class="tag" taget="_blank" href="/search/%E5%AD%97%E7%AC%A6%E9%9B%86%E5%90%8D%E5%AD%97+%E5%88%AB%E5%90%8D%E8%8E%B7%E5%8F%96/1.htm">字符集名字 别名获取</a>
                                    <div>文本数据的输入输出; 
          输入;数据流,缓冲流 
  
      输出;介绍向文本打印格式化的输出PrintWrite(); 
  
package 文本流;

import java.io.FileNotFound</div>
                                </li>
                                <li><a href="/article/1346.htm"
                                       title="ibatis模糊查询sqlmap-mapping-**.xml配置" target="_blank">ibatis模糊查询sqlmap-mapping-**.xml配置</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a>
                                    <div>        正常我们写ibatis的sqlmap-mapping-*.xml文件时,传入的参数都用##标识,如下所示: 
<resultMap id="personInfo" class="com.bijian.study.dto.PersonDTO">
	<res</div>
                                </li>
                                <li><a href="/article/1473.htm"
                                       title="java jvm常用命令工具——jdb命令(The Java Debugger)" target="_blank">java jvm常用命令工具——jdb命令(The Java Debugger)</a>
                                    <span class="text-muted">bijian1013</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/jdb/1.htm">jdb</a>
                                    <div>        用来对core文件和正在运行的Java进程进行实时地调试,里面包含了丰富的命令帮助您进行调试,它的功能和Sun studio里面所带的dbx非常相似,但 jdb是专门用来针对Java应用程序的。 
        现在应该说日常的开发中很少用到JDB了,因为现在的IDE已经帮我们封装好了,如使用ECLI</div>
                                </li>
                                <li><a href="/article/1600.htm"
                                       title="【Spring框架二】Spring常用注解之Component、Repository、Service和Controller注解" target="_blank">【Spring框架二】Spring常用注解之Component、Repository、Service和Controller注解</a>
                                    <span class="text-muted">bit1129</span>
<a class="tag" taget="_blank" href="/search/controller/1.htm">controller</a>
                                    <div>在Spring常用注解第一步部分【Spring框架一】Spring常用注解之Autowired和Resource注解(http://bit1129.iteye.com/blog/2114084)中介绍了Autowired和Resource两个注解的功能,它们用于将依赖根据名称或者类型进行自动的注入,这简化了在XML中,依赖注入部分的XML的编写,但是UserDao和UserService两个bea</div>
                                </li>
                                <li><a href="/article/1727.htm"
                                       title="cxf wsdl2java生成代码super出错,构造函数不匹配" target="_blank">cxf wsdl2java生成代码super出错,构造函数不匹配</a>
                                    <span class="text-muted">bitray</span>
<a class="tag" taget="_blank" href="/search/super/1.htm">super</a>
                                    <div>    由于过去对于soap协议的cxf接触的不是很多,所以遇到了也是迷糊了一会.后来经过查找资料才得以解决. 初始原因一般是由于jaxws2.2规范和jdk6及以上不兼容导致的.所以要强制降为jaxws2.1进行编译生成.我们需要少量的修改: 
 
我们原来的代码 
wsdl2java com.test.xxx -client http://..... 
修改后的代</div>
                                </li>
                                <li><a href="/article/1854.htm"
                                       title="动态页面正文部分中文乱码排障一例" target="_blank">动态页面正文部分中文乱码排障一例</a>
                                    <span class="text-muted">ronin47</span>

                                    <div>公司网站一部分动态页面,早先使用apache+resin的架构运行,考虑到高并发访问下的响应性能问题,在前不久逐步开始用nginx替换掉了apache。 不过随后发现了一个问题,随意进入某一有分页的网页,第一页是正常的(因为静态化过了);点“下一页”,出来的页面两边正常,中间部分的标题、关键字等也正常,唯独每个标题下的正文无法正常显示。 因为有做过系统调整,所以第一反应就是新上</div>
                                </li>
                                <li><a href="/article/1981.htm"
                                       title="java-54- 调整数组顺序使奇数位于偶数前面" target="_blank">java-54- 调整数组顺序使奇数位于偶数前面</a>
                                    <span class="text-muted">bylijinnan</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a>
                                    <div>
import java.util.Arrays;
import java.util.Random;

import ljn.help.Helper;


public class OddBeforeEven {

	/**
	 * Q 54 调整数组顺序使奇数位于偶数前面
	 * 输入一个整数数组,调整数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半</div>
                                </li>
                                <li><a href="/article/2108.htm"
                                       title="从100PV到1亿级PV网站架构演变" target="_blank">从100PV到1亿级PV网站架构演变</a>
                                    <span class="text-muted">cfyme</span>
<a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%AB%99%E6%9E%B6%E6%9E%84/1.htm">网站架构</a>
                                    <div>一个网站就像一个人,存在一个从小到大的过程。养一个网站和养一个人一样,不同时期需要不同的方法,不同的方法下有共同的原则。本文结合我自已14年网站人的经历记录一些架构演变中的体会。 1:积累是必不可少的 
架构师不是一天练成的。 
1999年,我作了一个个人主页,在学校内的虚拟空间,参加了一次主页大赛,几个DREAMWEAVER的页面,几个TABLE作布局,一个DB连接,几行PHP的代码嵌入在HTM</div>
                                </li>
                                <li><a href="/article/2235.htm"
                                       title="[宇宙时代]宇宙时代的GIS是什么?" target="_blank">[宇宙时代]宇宙时代的GIS是什么?</a>
                                    <span class="text-muted">comsci</span>
<a class="tag" taget="_blank" href="/search/Gis/1.htm">Gis</a>
                                    <div> 
 
       我们都知道一个事实,在行星内部的时候,因为地理信息的坐标都是相对固定的,所以我们获取一组GIS数据之后,就可以存储到硬盘中,长久使用。。。但是,请注意,这种经验在宇宙时代是不能够被继续使用的 
 
 
         宇宙是一个高维时空</div>
                                </li>
                                <li><a href="/article/2362.htm"
                                       title="详解create database命令" target="_blank">详解create database命令</a>
                                    <span class="text-muted">czmmiao</span>
<a class="tag" taget="_blank" href="/search/database/1.htm">database</a>
                                    <div>完整命令 
CREATE DATABASE mynewdb   USER SYS IDENTIFIED BY sys_password   USER SYSTEM IDENTIFIED BY system_password   LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/m</div>
                                </li>
                                <li><a href="/article/2489.htm"
                                       title="几句不中听却不得不认可的话" target="_blank">几句不中听却不得不认可的话</a>
                                    <span class="text-muted">datageek</span>

                                    <div>1、人丑就该多读书。 
2、你不快乐是因为:你可以像猪一样懒,却无法像只猪一样懒得心安理得。 
3、如果你太在意别人的看法,那么你的生活将变成一件裤衩,别人放什么屁,你都得接着。 
4、你的问题主要在于:读书不多而买书太多,读书太少又特爱思考,还他妈话痨。 
5、与禽兽搏斗的三种结局:(1)、赢了,比禽兽还禽兽。(2)、输了,禽兽不如。(3)、平了,跟禽兽没两样。结论:选择正确的对手很重要。 
6</div>
                                </li>
                                <li><a href="/article/2616.htm"
                                       title="1 14:00 PHP中的“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误" target="_blank">1 14:00 PHP中的“syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM”错误</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/PHP/1.htm">PHP</a>
                                    <div>原文地址:http://www.kafka0102.com/2010/08/281.html 
  
因为需要,今天晚些在本机使用PHP做些测试,PHP脚本依赖了一堆我也不清楚做什么用的库。结果一跑起来,就报出类似下面的错误:“Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM in /home/kafka/test/</div>
                                </li>
                                <li><a href="/article/2743.htm"
                                       title="xcode6 Auto layout and size classes" target="_blank">xcode6 Auto layout and size classes</a>
                                    <span class="text-muted">dcj3sjt126com</span>
<a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a>
                                    <div>官方GUI 
  
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/AutolayoutPG/Introduction/Introduction.html 
  
iOS中使用自动布局(一) 
  
http://www.cocoachina.com/ind</div>
                                </li>
                                <li><a href="/article/2870.htm"
                                       title="通过PreparedStatement批量执行sql语句【sql语句相同,值不同】" target="_blank">通过PreparedStatement批量执行sql语句【sql语句相同,值不同】</a>
                                    <span class="text-muted">梦见x光</span>
<a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1/1.htm">事务</a><a class="tag" taget="_blank" href="/search/%E6%89%B9%E9%87%8F%E6%89%A7%E8%A1%8C/1.htm">批量执行</a>
                                    <div>比如说:我有一个List需要添加到数据库中,那么我该如何通过PreparedStatement来操作呢? 
public void addCustomerByCommit(Connection conn , List<Customer> customerList) 
{ 
   String sql = "inseret into customer(id </div>
                                </li>
                                <li><a href="/article/2997.htm"
                                       title="程序员必知必会----linux常用命令之十【系统相关】" target="_blank">程序员必知必会----linux常用命令之十【系统相关】</a>
                                    <span class="text-muted">hanqunfeng</span>
<a class="tag" taget="_blank" href="/search/Linux%E5%B8%B8%E7%94%A8%E5%91%BD%E4%BB%A4/1.htm">Linux常用命令</a>
                                    <div>一.linux快捷键 
Ctrl+C : 终止当前命令 
Ctrl+S : 暂停屏幕输出 
Ctrl+Q : 恢复屏幕输出 
Ctrl+U : 删除当前行光标前的所有字符 
Ctrl+Z : 挂起当前正在执行的进程 
Ctrl+L : 清除终端屏幕,相当于clear 
  
二.终端命令 
clear : 清除终端屏幕 
reset : 重置视窗,当屏幕编码混乱时使用 
time com</div>
                                </li>
                                <li><a href="/article/3124.htm"
                                       title="NGINX" target="_blank">NGINX</a>
                                    <span class="text-muted">IXHONG</span>
<a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a>
                                    <div>pcre 编译安装 nginx 
conf/vhost/test.conf 
  
upstream admin { 
server 127.0.0.1:8080; 
} 
  
server { 
                listen       80; 
&</div>
                                </li>
                                <li><a href="/article/3251.htm"
                                       title="设计模式--工厂模式" target="_blank">设计模式--工厂模式</a>
                                    <span class="text-muted">kerryg</span>
<a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a>
                                    <div>工厂方式模式分为三种: 
  1、普通工厂模式:建立一个工厂类,对实现了同一个接口的一些类进行实例的创建。 
 
  2、多个工厂方法的模式:就是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式就是提供多个工厂方法,分别创建对象。 
 
  3、静态工厂方法模式:就是将上面的多个工厂方法模式里的方法置为静态,</div>
                                </li>
                                <li><a href="/article/3378.htm"
                                       title="Spring InitializingBean/init-method和DisposableBean/destroy-method" target="_blank">Spring InitializingBean/init-method和DisposableBean/destroy-method</a>
                                    <span class="text-muted">mx_xiehd</span>
<a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a>
                                    <div>1.initializingBean/init-method 
实现org.springframework.beans.factory.InitializingBean接口允许一个bean在它的所有必须属性被BeanFactory设置后,来执行初始化的工作,InitialzingBean仅仅指定了一个方法。 
通常InitializingBean接口的使用是能够被避免的,(不鼓励使用,因为没有必要</div>
                                </li>
                                <li><a href="/article/3505.htm"
                                       title="解决Centos下vim粘贴内容格式混乱问题" target="_blank">解决Centos下vim粘贴内容格式混乱问题</a>
                                    <span class="text-muted">qindongliang1922</span>
<a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a><a class="tag" taget="_blank" href="/search/vim/1.htm">vim</a>
                                    <div> 
 
有时候,我们在向vim打开的一个xml,或者任意文件中,拷贝粘贴的代码时,格式莫名其毛的就混乱了,然后自己一个个再重新,把格式排列好,非常耗时,而且很不爽,那么有没有办法避免呢?  答案是肯定的,设置下缩进格式就可以了,非常简单:  在用户的根目录下 直接vi  ~/.vimrc文件 然后将set pastetoggle=<F9> 写入这个文件中,保存退出,重新登录,</div>
                                </li>
                                <li><a href="/article/3632.htm"
                                       title="netty大并发请求问题" target="_blank">netty大并发请求问题</a>
                                    <span class="text-muted">tianzhihehe</span>
<a class="tag" taget="_blank" href="/search/netty/1.htm">netty</a>
                                    <div>多线程并发使用同一个channel 
java.nio.BufferOverflowException: null 
at java.nio.HeapByteBuffer.put(HeapByteBuffer.java:183) ~[na:1.7.0_60-ea] 
at java.nio.ByteBuffer.put(ByteBuffer.java:832) ~[na:1.7.0_60-ea] </div>
                                </li>
                                <li><a href="/article/3759.htm"
                                       title="Hadoop NameNode单点问题解决方案之一 AvatarNode" target="_blank">Hadoop NameNode单点问题解决方案之一 AvatarNode</a>
                                    <span class="text-muted">wyz2009107220</span>
<a class="tag" taget="_blank" href="/search/NameNode/1.htm">NameNode</a>
                                    <div>我们遇到的情况 
Hadoop NameNode存在单点问题。这个问题会影响分布式平台24*7运行。先说说我们的情况吧。 
我们的团队负责管理一个1200节点的集群(总大小12PB),目前是运行版本为Hadoop 0.20,transaction logs写入一个共享的NFS filer(注:NetApp NFS Filer)。 
经常遇到需要中断服务的问题是给hadoop打补丁。 DataNod</div>
                                </li>
                </ul>
            </div>
        </div>
    </div>

<div>
    <div class="container">
        <div class="indexes">
            <strong>按字母分类:</strong>
            <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a
                href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a
                href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a
                href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a
                href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a
                href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a
                href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a
                href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a
                href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a>
        </div>
    </div>
</div>
<footer id="footer" class="mb30 mt30">
    <div class="container">
        <div class="footBglm">
            <a target="_blank" href="/">首页</a> -
            <a target="_blank" href="/custom/about.htm">关于我们</a> -
            <a target="_blank" href="/search/Java/1.htm">站内搜索</a> -
            <a target="_blank" href="/sitemap.txt">Sitemap</a> -
            <a target="_blank" href="/custom/delete.htm">侵权投诉</a>
        </div>
        <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved.
<!--            <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>-->
        </div>
    </div>
</footer>
<!-- 代码高亮 -->
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script>
<script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script>
<link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/>
<script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script>





</body>

</html>