比如我有三个promise方法,A、B、C,按照promise原理,是先执行A接着B最后C,如果我想让C在B之前执行,如何做呢?
本质上promise只是一种异步的描述,并不期望你掌握执行的顺序的。
如果你想要掌控顺序 就需要调整成同步的操作。
例如。
await C();await B();
根据额外补充需求中的 三个函数不在同一个文件中的情况。可以增加调度器(以EvenBus举例),转交控制权到调度器。在异步函数回调中触发事件传递执行函数。在调度器中编写具体的调整顺序的逻辑。
B().then(() => eventbus.$emit('someKey', () => ({key: 'B', fn: workB})))
C().then(() => eventbus.$emit('someKey', () => ({key: 'C', fn: workC})))
const fns = {};
eventbus.$on('someKey', async ({key, fn}) => {
if (fns['C'] && key === 'B') {
await fns['C']
await fn
fns['C'] = undefined
} else if (fns['B'] && key === 'C') {
await fn
await fns['B']
fns['B'] = undefined
} else {
fns[key] = fn
}
})
多个没关关联的 Promise 之间本身是没有顺序的。
如果需要顺序,可以通过 Promise 对象的
.then()
来指定该 Promise 完成之后进行什么操作,包括发起另一个 Promise。由于
.then()
的处理在步骤较多的时候看起来比较难受,所以可以使用await
来简化代码参考阅读:理解 JavaScript 的 async/await