【发布时间】:2017-06-24 02:05:38
【问题描述】:
我有一个处理 Chrome 窗口事件的事件处理程序。为了处理这些事件,我在 promise 中调用 async chrome.windows.get 并使用 then() 来处理事件。
问题是当多个then() 链接到单个promise 解决时,它们的执行顺序与源事件顺序不同。例如,我收到事件 1,2 和 3,但执行顺序可能是 3、2、1。
我需要所有then() 都按照事件发生的顺序执行。
简化代码示例:
chromeWinRequests = new Map();
function eventHandler(windowId) {
if (!chromeWinRequests.has(windowId)) {
chromeWinRequests.set(windowId, new Promise((resolve, reject) => {
chrome.windows.get(windowId, {populate: true}, (cwin) => {
if (!chrome.runtime.lastError) {
resolve(cwin);
} else {
reject(chrome.runtime.lastError.message);
}
});
}));
}
chromeWinRequests.get(windowId).then((cwin) => {
// process event here
// when I get here, the source order of events is not preserved
});
}
我可以做些什么来保留处理顺序吗?
提前谢谢你。
【问题讨论】:
-
当你说你得到事件 1、2 和 3 时,你的代码在哪里?我在任何地方都没有看到,因此不明白这个问题。
-
答案不属于问题。
标签: javascript promise