JavaScript中异步/等待怎么用

  介绍

这篇文章主要介绍了JavaScript中异步/等待怎么用,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。

ES8引入的<代码>异步/等待> 优化> 异步/等待>

前置知识

<强>异步作用是什么

从MDN可以看出:

<代码>异步代码函数返回的是一个<强> 承诺对象。<强>异步函数(包含函数语句,函数表达式,λ表达式)会返回一个<强> 承诺对象,如果在函数中<代码> 返回一个直接量,<强>异步会把这个直接量通过<代码> Promise.resolve() 封装成<强> 承诺对象。

如果<强>异步函数没有返回值,它会返回<代码> Promise.resolve(定义)

<强>等待作用是什么

从MDN了解到:

<强>等待等待的是一个表达式,这个表达式的计算结果是<强> 承诺对象或者其它值(换句话说,<强>等待可以等任意表达式的结果)。

如果它等到的不是一个承诺对象,那等待表达式的运算结果就是它等到的东西。

如果它等到的是一个承诺对象,等待就忙起来了,它会阻塞后面的代码,等着承诺对象的决心,然后得到解决的值,作为等待表达式的运算结果。

这就是等待必须用在异步函数中的原因.async函数调用不会造成阻塞,它内部所有的阻塞都被封装在一个承诺对象中异步执行。

异步/等待的优点

<代码>异步/等待> //异步/等待   异步getBooksByAuthorWithAwait (authorId) {   const书=等待bookModel.fetchAll ();   返回的书。过滤器(b=比;b。authorId===authorId);   }//承诺   getBooksByAuthorWithPromise (authorId) {   返回bookModel.fetchAll ()   不要犹豫(书=比;书。过滤器(b=比;b。authorId===authorId));   }

很明显,<代码>异步/等待> 版承诺本更容易理解。如果忽略<代码>等待代码>

最佳的地方不仅在于可读性。<代码>异步/等待>

 JavaScript中异步/等待怎么用“> </p> <p>本地浏览器的支持意味着你不必转换代码。更重要的是,它便于调试。当在函数入口点设置断点并跨过<代码>等待> </代码行时,将看到调试器在<代码> bookModel.fetchAll() </代码>执行其任务时暂停片刻,然后它将移动到下一个<代码>。过滤器> </代码行,这比<强> <em> </em> </强>承诺代码要简单得多,在<em> </em>中承诺,必须在<代码>。过滤器> </代码行上设置另一个断点。</p> <p> <img src= getBooksByAuthorWithPromise (authorId) {   如果(! authorId) {   返回null;   }   返回bookModel.fetchAll ()   不要犹豫(书=比;书。过滤器(b=比;b。authorId===authorId));   }

在上述代码中,<代码> getBooksByAuthorWithPromise> 承诺(正常情况下)或<强>空强值(异常情况下),在异常情况下,调用者不能调用<代码>区间()> 异步代码声明,这种情况就不会出现了。

异步/等待可能会产生误导

一些文章将<强>异步/等待与<强> 承诺进行了比较,并声称它是JavaScript下一代异步编程风格,对此作者深表异议。<代码>异步/等待>

从本质上说,<强>异步函数仍然是<强> 强的承诺。在正确使用

JavaScript中异步/等待怎么用