可以看到我们仍然需要书写一些样板代码,所以我们此时需要一个async函数能够管理所有promise函数的调用,还要管理所有向生成器发送的请求。虽然我们可以在代码中只书写一次这个过程,然后每次需要的时候对其进行复用,但如果我们完全不用关心这个问题就更好了。负责JavaScript的人们也注意到了将生成器和promise相结合的强大效果,因而他们也希望直接借助语言层面来支持这个特性,从而使我们开发更加便捷。
因此在这种形势下,当前的javascript标准新增两个关键字,用于替代样板代码:
(async function () {
try {
const ninjas = await getJSON('data/ninjas.json');
const missions = await getJSON(mission[0].missionsUrl);
console.log(missions);
} catch (e) {
console.log('Error:' + e);
}
})()
通过关键字function 之前使用关键字async,可以表明当前的函数依赖一个异步返回的值。在每个调用异步任务的位置上,都要放置一个await关键字,用来告诉JavaScript引擎,请不要阻塞应用执行的情况下在这个位置等待执行结果。
参考《JavaScript忍者秘籍》