博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【js】async和await使用
阅读量:6720 次
发布时间:2019-06-25

本文共 1890 字,大约阅读时间需要 6 分钟。

摘自

关于asyncawait使用

个人理解:在每一个函数前面的都加上async,函数内部,如果是异步操作,直接在其前面加上await即可,等待一步函数执行的结果。await后面可以接任何变量,可以是常量或者promiseasync修饰的函数自动变成一个promise.正常情况下,await命令后面是一个 Promise 对象。如果不是,会被转成一个立即resolve的 Promise 对象。

//经过async修饰之后,自动变成promise对象async function f() {  return 'hello world';}f().then(v => console.log(v))// "hello world"async function f() {  return await 123;}f().then(v => console.log(v))// 123
//错误处理 async function f() {  throw new Error('出错了');}f().then(  v => console.log(v),  e => console.log(e))// Error: 出错了

async中错误处理

//使用catch捕捉错误async function f() {  await Promise.reject('出错了');}f().then(v => console.log(v)).catch(e => console.log(e))// 出错了
async function main() {  try {    var val1 = await firstStep();    var val2 = await secondStep(val1);    var val3 = await thirdStep(val1, val2);    console.log('Final: ', val3);  }  catch (err) {    console.error(err);  }}
//使用async控制指定时间打印function timeout(ms) {  return new Promise((resolve) => {    setTimeout(resolve, ms);  });}async function asyncPrint(value, ms) {  await timeout(ms);  console.log(value)}asyncPrint('hello world', 50);

多种形式

const foo = async function(){}async function foo(){}const foo = async () => {};

并发处理

let foo = await getFoo();let bar = await getBar();//======================// 写法一let [foo, bar] = await Promise.all([getFoo(), getBar()]);// 写法二let fooPromise = getFoo();let barPromise = getBar();let foo = await fooPromise;let bar = await barPromise;//使用下面的方式是,使一步操作同时触发。最上面的方式是同步执行。//并发执行的方式选择async function dbFuc(db) {  let docs = [{}, {}, {}];  let promises = docs.map((doc) => db.post(doc));  let results = await Promise.all(promises);  console.log(results);}// 或者使用下面的写法//使用for循环控制了使用await的时间async function dbFuc(db) {  let docs = [{}, {}, {}];  let promises = docs.map((doc) => db.post(doc));  let results = [];  for (let promise of promises) {    results.push(await promise);  }  console.log(results);}

转载地址:http://unjmo.baihongyu.com/

你可能感兴趣的文章
multiprocess(上)
查看>>
第43条:返回零长度的数组或者集合,而不是null
查看>>
homework-10
查看>>
1123: 零起点学算法30——参加程序设计竞赛
查看>>
jquery中this和$(this)使用的地方
查看>>
洛谷P4557 [JSOI2018]战争(闵可夫斯基和+凸包)
查看>>
洛谷P4151 [WC2011]最大XOR和路径(线性基)
查看>>
[bzoj 2456]mode
查看>>
jQuery页面元素操作之遍历元素
查看>>
CodeFile与CodeBehind的区别
查看>>
UOJ#428. 【集训队作业2018】普通的计数题
查看>>
[HNOI2015]菜肴制作
查看>>
go练习3 --map的操作
查看>>
github设置添加SSH
查看>>
Oracle案例04——TNS-12547: TNS:lost contact
查看>>
解决“同个UIView里面有多个UITableView的时候不能点击状态栏回到顶部”问题
查看>>
Centos6架设GIT服务,windows客户端使用TortoiseGit加载KEYGEN连接GIT服务器
查看>>
Blissymbolics
查看>>
Codeforces 961E - Tufurama
查看>>
AtCoder Regular Contest 102 D - All Your Paths are Different Lengths
查看>>