这是代码吗
Promise.all([
promise1,
promise2,
])
.then(() => doSomething())
相当于
promise1
.then(() => promise2)
.then(() => doSomething())
我认为它们是等价的,但它们在fortunejs和mocha应用程序中表现不一样。以下是有关此应用程序的更多详细信息
我正在使用fortune.js,我想使用mocha编写一些测试。我想要实现的是使用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返回Promise,为什么我会有不同的行为?
答案 0 :(得分:2)
此
Promise.all([
promise1,
promise2,
])
.then(() => doSomething())
开始同时执行两个promise并在最后完成时调用then(),而这个
promise1
.then(() => promise2)
.then(() => doSomething())
从第一个承诺开始,当它完成时执行第二个承诺,依此类推。
答案 1 :(得分:1)
不,他们不等同。
Promise.all()
表示.then()
表示虽然返回值是输入承诺的顺序,但它们不会按此顺序解析。
与<div class="row" ng-controller="*protopathyUISelectCtrl as ctrl*">
<div class="form-group m-b-sm required col-md-4 col-xs-3" >
<div class="input-group">
<span class="input-group-addon">test</span>
<ui-select ng-model="ctrl.country.selected" theme="bootstrap" title="Choose a country" ng-disabled="disabled" append-to-body="false">
<ui-select-match placeholder="test">{{$select.selected.name}}</ui-select-match>
<ui-select-choices repeat="country in ctrl.countries | filter: $select.search">
<span ng-bind-html="country.name | highlight: $select.search"></span>
<small ng-bind-html="country.code | highlight: $select.search"></small>
</ui-select-choices>
</ui-select>
</div>
</div>
</div>
的链接承诺按顺序解决每个承诺。