我有两个promises,它们都是返回数组
let promise1 = Promise.resolve(['one', 'two']);
let promise2 = Promise.resolve(['three', 'four']);
然后我希望这两个承诺一起等于一个数组:
expect(promise1.concat(promise2)).toEqual(['one', 'two', 'three', 'four']);
上面的代码是简化的,我知道我可以做2个期望语句,但值可以在promise 1或promise 2之间改变。
我一直在乱搞当时的街区无济于事...... 我怎样才能达到上述期望声明?它不必是concat,我只想将这两个promise数组合并为1。
答案 0 :(得分:1)
只需使用Promise.all组合您的承诺,然后使用reduce()
将结果累积到一个数组中:
const promise1 = Promise.resolve([1,2])
const promise2 = Promise.resolve([3,4])
Promise.all([promise1, promise2]).then(result => {
const combined = result.reduce((acc, result) => {
return acc.concat(result)
}, [])
console.log(combined)
})

这允许您组合任意数量的数组。
答案 1 :(得分:0)
我不太清楚你在追求什么,因为你基本上已经写好了!
const promise1 = Promise.resolve(['one', 'two']);
const promise2 = Promise.resolve(['three', 'four']);
Promise.all([promise1, promise2]).then(([result1, result2]) =>
console.log(result1.concat(result2))
);
如果您需要对数组进行重复数据删除,可以通过多种方式确定这是否是您需要的。
答案 2 :(得分:0)
基于GitHub上的"how does expect work",请尝试:
expect(
Promise.all( promise1, promise2)
.then(
results=>results.reduce( (acc, result) => acc.concat( result), [])
)
).toEqual(['one', 'two', 'three', 'four']);
Promise.all
满足一系列个人承诺结果。 then
子句将每个结果数组连接成一个组合累加器数组(使用reduce
,如@NicholasKyriakides回答)。然后,expect
应处理由.then
返回的最终承诺,如链接中所述:
expect(promise).toEqual('foo');...基本上将被替换为:
promise.then(function(value) { expect(value).toEqual('foo'); }