for 循环中的 Promise

Promises inside for loops

我正在为此苦苦挣扎:

下面的代码片段不起作用,因为 'i' 不是我所期望的。我怎样才能完成这项工作?

for (var i = 0; i < subElements.length; ++i) {
    element(by.id('get-data')).click();

    // Check users returned
    element.all(by.id('users')).map(function (elm) {
        return elm;
    }).then(function (users) {
        expect(users.length).toBe(expectedRecords[i]);
        // Some more checks to be added later
    });
}

使用蓝鸟

var Promise = require('bluebird');

it('my test', function(done){
  var promises = subElements.map(function(subElm, i){
    return element(by.id('get-data')).click()
      .then(function(){
        // Check users returned
        return element.all(by.id('users')).map(function (elm) {
          return elm;
        })
      })
      .then(function(users) {
        expect(users.length).toBe(expectedRecords[i]);
      });
  });

  Promise.all(promises).nodeify(done);
})

关于:

for (var i = 0; i < subElements.length; ++i) {
    element(by.id('get-data')).click();

    var count = element.all(by.id('users')).count();
    expect(count).toBe(expectedRecords[i]);
}

只要您不在 then 中访问 i,它就是您想要的,否则 i 将是您循环中的最后一个值,您我需要关闭。

编辑:见