期待2个承诺的结果等于一个(结合2个承诺数组)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了期待2个承诺的结果等于一个(结合2个承诺数组)相关的知识,希望对你有一定的参考价值。

我有两个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。

答案

只需使用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)
})
另一答案

我不太清楚你在追求什么,因为你基本上已经写好了!

const promise1 = Promise.resolve(['one', 'two']);
const promise2 = Promise.resolve(['three', 'four']);

Promise.all([promise1, promise2]).then(([result1, result2]) =>
   console.log(result1.concat(result2))
);
另一答案

基于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');
}

以上是关于期待2个承诺的结果等于一个(结合2个承诺数组)的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Mongoose 5.0.13 - 从蓝鸟错误中获得 500 的 angular-fullstack 生成的应用程序:错误:期待一个数组,一个承诺

量角器 - 如何将一组承诺的结果放入另一个数组

如何“承诺”(或回调)此代码

在承诺回调中发送数组响应,但响应为空白

Angular 2 在 ngOnInit 承诺中推送数组后不刷新视图

Angular 2 在 ngOnInit 承诺中推送数组后不刷新视图