如何创建网站站点并且避免广告,江苏金安建设公司网站,济南市住建局官方网站,查看自己网站访问量虽然co是社区里面的优秀异步解决方案#xff0c;但是并不是语言标准#xff0c;只是一个过渡方案。ES7语言层面提供async / await去解决语言层面的难题。目前async / await 在 IE edge中已经可以直接使用了#xff0c;但是chrome和Node.js还没有支持。幸运的是#xff0c;b… 虽然co是社区里面的优秀异步解决方案但是并不是语言标准只是一个过渡方案。ES7语言层面提供async / await去解决语言层面的难题。目前async / await 在 IE edge中已经可以直接使用了但是chrome和Node.js还没有支持。幸运的是babel已经支持async的transform了所以我们使用的时候引入babel就行。在开始之前我们需要引入以下的packagepreset-stage-3里就有我们需要的async/await的编译文件。 无论是在Browser还是Node.js端都需要安装下面的包。 npm install babel-core --savenpm install babel-preset-es2015 --savenpm install babel-preset-stage-3 --save这里推荐使用babel官方提供的require hook方法。就是通过require进来后接下来的文件进行require的时候都会经过Babel的处理。因为我们知道CommonJs是同步的模块依赖所以也是可行的方法。这个时候需要编写两个文件一个是启动的js文件另外一个是真正执行程序的js文件。 启动文件index.js require(babel-core/register);
require(./async.js);真正执行程序的async.js const request require(request);const options {url: https://api.github.com/repos/cpselvis/zhihu-crawler,headers: {User-Agent: request}
};const getRepoData () {return new Promise((resolve, reject) {request(options, (err, res, body) {if (err) {reject(err);}resolve(body);});});
};async function asyncFun() {try {const value await getRepoData();// ... 和上面的yield类似如果有多个异步流程可以放在这里比如// const r1 await getR1();// const r2 await getR2();// const r3 await getR3();// 每个await相当于暂停执行await之后会等待它后面的函数不是generator返回值之后再执行后面其它的await逻辑。return value;} catch (err) {console.log(err);}
}asyncFun().then(x console.log(x: ${x})).catch(err console.error(err));注意点 async用来申明里面包裹的内容可以进行同步的方式执行await则是进行执行顺序控制每次执行一个await程序都会暂停等待await返回值然后再执行之后的await。await后面调用的函数需要返回一个promise另外这个函数是一个普通的函数即可而不是generator。await只能用在async函数之中用在普通函数中会报错。await命令后面的 Promise 对象运行结果可能是 rejected所以最好把 await 命令放在 try...catch 代码块中。其实async / await的用法和co差不多await和yield都是表示暂停外面包裹一层async 或者 co来表示里面的代码可以采用同步的方式进行处理。不过async / await里面的await后面跟着的函数不需要额外处理co是需要将它写成一个generator的。 promise.then().catch()的catch通过async/await怎么处理 try {const value await getRepoData();return value;} catch (err) {console.log(err);}牛逼解释 https://segmentfault.com/a/1190000007535316 转载于:https://www.cnblogs.com/smzd/p/8665214.html