为什么不?没有理由,只是没有完成。
在2017年,它 已 在ES2017中完成:
async函数可以用于
await等待,无阻塞地等待承诺的结果。如果
getSomething返回promise(请注意
await)并且位于
async函数内部,则可以这样编写代码:
try { var foo = await getSomething(); var bar = doSomething(foo); console.log(bar); } catch (error) { console.error(error);}
(我曾假设您只打算getSomething
异步,但两者都可能是异步的。)
实时示例(需要最新的浏览器,例如最新的Chrome):
function getSomething() { return new Promise((resolve, reject) => { setTimeout(() => { if (Math.random() < 0.5) { reject(new Error("failed")); } else { resolve(Math.floor(Math.random() * 100)); } }, 200); });}function doSomething(x) { return x * 2;}(async () => { try { var foo = await getSomething(); console.log("foo:", foo); var bar = doSomething(foo); console.log("bar:", bar); } catch (error) { console.error(error); }})();The first promise fails half the time, so click Run repeatedly to see both failure and success.
您已用NodeJS标记了您的问题。如果将Node
API包装在Promise中(例如,使用promisify),则可以编写异步运行的漂亮的直接同步代码。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)