新手如何快速理解js异步编程(2)

async function say(greeting) { return new Promise(function(resolve, then) { setTimeout(function() { resolve(greeting) }, 1500) }) } ;(async function() { let v1 = await say('Hello') console.log(v1) let v2 = await say('World') console.log(v2) })()

await 可以理解为暂停当前 async function 的执行,等待 Promise 处理完成。。若 Promise 正常处理(fulfilled),其回调的resolve函数参数作为 await 表达式的值。

async、await 的出现,减少了多个 then 的链式调用形式的代码。下面我们结合 Promise 与 Generator 来实现 async、await

function async(makeGenerator) { return function() { const generator = makeGenerator.apply(this, arguments) function handle({ value, done }) { if (done === true) return Promise.resolve(value) return Promise.resolve(value).then( (res) => { return handle(generator.next(res)) }, function(err) { return handle(generator.throw(err)) } ) } try { return handle(generator.next()) } catch (ex) { return Promise.reject(ex) } } } async(function*() { var v1 = yield say('hello') console.log(1, v1) var v2 = yield say('world') console.log(2, v2) })()

本质上就是利用递归完成 function* () { ... } 的自动执行。相比与 Generator 函数,这种形式无需手动执行,并且具有更好的语义。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/3b89eeed7d21ced635d78cb776c00738.html