资讯专栏INFORMATION COLUMN

【js】async和await使用

luodongseu / 3199人阅读

摘要:摘自模块关于和使用个人理解在每一个函数前面的都加上,函数内部,如果是异步操作,直接在其前面加上即可,等待一步函数执行的结果。修饰的函数自动变成一个正常情况下,命令后面是一个对象。并发执行的方式选择或者使用下面的写法使用循环控制了使用的时间

摘自http://es6.ruanyifeng.com/#docs/async#co模块

关于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);
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81075.html

相关文章

  • 【译文】Node.js v7 Nightly版本的async/await小实践

    摘要:正文的实践几个月前,引擎加入了特性。注意目前特性只在非稳定版本的中才有。暂时建议不要用于生产环境。意思是它能以非阻塞的方式暂定代码的执行,以等待上一个结果返回。在此之前,还它只能通过转译器来实现。 来自新手向国外技术博客RisingStack的又一篇Node.js相关技术文章,原文请看此。 正文 Node.js v7的async/await实践 几个月前,JavaScript引擎V8加...

    Little_XM 评论0 收藏0
  • Async/Await替代Promise的6个理由

    摘要:是基于实现的,它不能用于普通的回调函数。忧虑对于,也许你有一些合理的怀疑它使得异步代码不再明显我们已经习惯了用回调函数或者来识别异步代码,我们可能需要花数个星期去习惯新的标志。 译者按: Node.js的异步编程方式有效提高了应用性能;然而回调地狱却让人望而生畏,Promise让我们告别回调函数,写出更优雅的异步代码;在实践过程中,却发现Promise并不完美;技术进步是无止境的,这时...

    tuomao 评论0 收藏0
  • JS基础】从JavaScript中的for...of说起(下) - asyncawait

    摘要:基础从中的说起上和在异步操作中使用和是一件比较费劲的事情,而给我们提供了更为简便的和。表达式会暂停当前的执行,等待处理完成。若正常处理,其回调的函数参数作为表达式的值,继续执行。若处理异常,表达式会把的异常原因抛出。 写在前面 本文首发于公众号:【符合预期的CoyPan】 在上一篇文章中,梳理了javascript中的两个重要概念:iterator和generator,并且介绍了两者在...

    hufeng 评论0 收藏0
  • JS中的async/await -- 异步隧道尽头的亮光

    摘要:结果输出可以看出函数返回的是一个对象,如果函数中一个直接量,函数会封装成对象返回,而如果没有返回值时,函数会返回在没有结合时,函数会立即执行,返回一个对象。 JS中的异步操作从最初的回调函数演进到Promise,再到Generator,都是逐步的改进,而async函数的出现仿佛看到了异步方案的终点,用同步的方式写异步。showImg(https://segmentfault.com/i...

    jaysun 评论0 收藏0
  • 如何在 JS 循环中正确使用 asyncawait

    摘要:蛤当你尝试在循环中使用时,事情就会变得复杂一些。这意味着循环中的应该按顺序执行。在循环中使用首先,使用对数组进行遍历。在中使用如果在中使用始终返回数组,这是因为异步函数总是返回。在循环中使用当你使用时,希望筛选具有特定结果的数组。 async 与 await 的使用方式相对简单。 蛤当你尝试在循环中使用await时,事情就会变得复杂一些。 想阅读更多优质文章请猛戳GitHub博客,一年...

    liujs 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<