【发布时间】:2017-09-30 12:33:21
【问题描述】:
考虑以下情况:
const waitForEvent = async (api) => {
api.on('eventOne', () => {
return 'eventOne';
})
api.on('eventTwo', () => {
return 'eventTwo';
})
api.on('eventThree', () => {
return 'eventThree';
})
api.load();
}
我要做的是在异步函数内的api 变量上设置事件回调,触发api.load() 函数,然后返回首先发生的事件,在这种情况下是eventOne|eventTwo|eventThree
问题是,这个语法不好,这个例子不起作用。我找不到任何方法来使用 async/await 来实现这一点,不得不恢复到这样的承诺:
const waitForEvent = (api) => {
return new Promise(resolve) => {
api.on('eventOne', () => {
resolve('eventOne');
})
api.on('eventTwo', () => {
resolve('eventTwo');
})
api.on('eventThree', () => {
resolve('eventThree');
})
api.load();
}
}
所以我的问题是,这可以使用 async/await 来完成吗?无论如何,这可以使用新的 async/await es7 语法来完成吗?
【问题讨论】:
-
一个问题是您的
return语句从它们的特定事件处理函数返回它们的值,而不是主要的waitForEvent函数 -
当然,我知道 :) 感谢您指出这一点。我正在想办法解决这个问题。
-
我不明白你所说的“我不得不恢复承诺”是什么意思。
async/await仍然使用承诺?而如果api没有被promisified,则需要使用Promise构造函数。 -
eventOne、eventTwo、eventThree是什么意思?是“其中一个”还是“任意数量的任意顺序”或“所有 3 个随机顺序”?我问是因为也许 Promise 不是解决您的问题的最佳抽象。
标签: javascript asynchronous async-await ecmascript-2017