逐个验证承诺数组

时间:2017-05-10 13:29:55

标签: javascript arrays protractor

我有一个创建我和一系列承诺的函数。我可以通过使用像

这样的东西来满足整个数组
Promise.all(array).then(values => { 
  console.log(values); // [true, true, true] 
});

但是我想要做的是验证数组的每个项目,然后使用chai期望每个值都为真。我可以使用像Promise.resolve这样的东西来指定数组中的索引并对特定的索引执行验证。

理想情况下,我想获取值数组并循环遍历数组,对每个值执行测试,直到数组完成,然后一旦完成就实现回调(因为我使用量角器)黄瓜)

在我的脑海中,我认为以下内容会起作用,但我得到的只是array.then不是函数,尽管当我在数组上保证所有数据时我都可以看到值。

array.then((values) => {
    let count = 0;
    values.forEach((check) => {
        chai.expect(check).to.be.true();
    });
    count += 1;
    count >= values.length ? callback() : null;
});

2 个答案:

答案 0 :(得分:0)

您可以对派生的承诺数组应用Promise.all,这些承诺会提供与原始承诺相同的值,但会将chai测试应用于其结果:

Promise.all(array.map(prom => 
    prom.then( value => (chai.expect(value).to.be.true, value) )
)).then(values => { 
    console.log(values); // [true, true, true] 
    callback();
}).catch(err => {
    console.log('failure', err);
});

答案 1 :(得分:0)

Promise.all会将promises数组解析为值数组。然后你只需要用断言迭代这些值。

var promise1 = Promise.resolve(true);
var promise2 = Promise.resolve(true);
var arrayOfPromises = [promise1, promise2]
Promise.all(arrayOfPromises).then(arrayOfValues=> { 
    console.log(arrayOfValues); // [true, true]
    arrayOfValues.forEach((value) => {
        chai.expect(value).to.be.true;
    }); 
});