自2009年提出这个问题以来,Javascript取得了长足的发展。现在,所有其他答案都已过时或过于复杂。这是当前的最佳做法:
就是这个。function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms));}async function demo() { console.log('Taking a break...'); await sleep(2000); console.log('Two seconds later, showing sleep in a loop...'); // Sleep in loop for (let i = 0; i < 5; i++) { if (i === 3) await sleep(2000); console.log(i); }}demo();
await sleep(<duration>)。
还是单线:
await new Promise(r => setTimeout(r, 2000));
注意,
- await只能在以async关键字为前缀的函数中执行,或者在某些环境中(例如Chrome DevTools控制台或Runkit)在脚本的顶层执行。
- await仅暂停当前async功能
- Promises,是ES2015(又名ES6)的本机功能。我们还在睡眠功能的定义中使用了箭头功能。
- 该async/await功能使代码可以明确地等待承诺的达成(解决或拒绝)。
兼容性
- 诺言在Node v0.12 +中受支持,并且在浏览器(IE除外)中得到广泛支持
- async/ await降落在V8中,自Chrome 55(于2016年12月发布) 以来已默认启用
- 它于2016年10月降落在Node 7上
- 并于2016年11月登陆Firefox Nightly
如果你正在使用节点年纪比7(已经达成了一些奇怪的原因生命的尽头),或瞄准旧的浏览器,async/ await仍然可以通过使用巴别塔(一种工具,将transpile的Javascript +新功能集成到普通的旧的Javascript) ,带有transform-async-to-generator插件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)