这段代码等同于是Promise.all([]),相当于promise.then()。然后,()
promise1
.then(() => promise2)
.then(() => doSomething())
Promise.all([
promise1,
promise2,
])
.then(() => doSomething())
我以为他们是等价的,但他们做的在fortunejs和mocha应用程序中表现不一样。以下是有关此应用程序的详细信息
我使用fortune.js,我想编写使用摩卡一些测试。我试图实现的是使用beforeEach
挂钩来截断数据库中的表格,然后插入一些预先设定的值。所以,如果我有两个表名为customer
和user
我会做这样的事情
beforeEach(function() {
return Promise.all([store.delete('user'), store.delete('customer')])
.then(() => store.create('customer', {
id: '0987654321234567890',
// More data
}))
.then(() => store.create('user', {
id: 'qwertyuioppoiuytrewq',
customer: '0987654321234567890',
// More data
}));
});
此代码并不稳定,有时,有时不工作没有我可以找到为什么(%左右50的成功率)
但是,如果我切换到该代码是工作:
beforeEach(function() {
return store.delete('customer')
.then(() => store.delete('user'))
.then(() => store.create('customer', {
id: '0987654321234567890',
// More data
}))
.then(() => store.create('user', {
id: 'qwertyuioppoiuytrewq',
customer: '0987654321234567890',
// More data
}));
});
我认为
Promise.all([
promise1,
promise2,
])
.then(() => doSomething())
相当于
promise1
.then(() => promise2)
.then(() => doSomething())
由于store.delete回报的承诺,为什么我有一个不同的行为?然后
Brillant!顺序不是问题,但问题是我尝试同时访问数据库两次 – ThomasThiebaud
这就是all()的设计目的。您可以使用each()或map()和其他函数按顺序解析promise。 – marekful
非常感谢,我会做;) – ThomasThiebaud