JS未定义的承诺

时间:2016-02-03 10:37:36

标签: javascript node.js protractor

我是node.js和量角器端到端测试的新手,可能我不知道一些非常简单的事情,但我无法找到答案。

我有一个for循环,我想从一个返回promise的函数中获取数据。代码块看起来像这样:

for (var i=2; i<Math.ceil(searchTotal/pageSize)+1; i++) {
    checkNext(i, pageSize, searchTotal).then( function(pageData){
        console.log(pageData + ' PENDING ');
        if (!pageData.isCorrect) {
            console.log(pageData + ' FAILED');
            expect(pageData.searchText).toEqual(pageData.formedText);
        }
        else if (i == Math.ceil(searchTotal/pageSize)) {
            console.log(pageData + ' SUCCEEDED');
            expect(pageData.searchText).toEqual(pageData.oldText);
        }
    })
}

事实是,pageData始终未定义。

如果有人可以指出我的错误,那会很高兴。

2 个答案:

答案 0 :(得分:1)

确保return中有checkNext。如果您没有明确地返回某些内容,则承诺将返回undefined

答案 1 :(得分:0)

您可能遇到的一个问题是异步循环。异步循环很难。幸运的是,Stack上有manymany个答案。因为它是异步的,所以节点会烧掉你的循环,然后只传递最后一个值。

使用提供的代码,我无法提供具体的示例,但是一个通用示例(请参阅其他答案以了解更多方法)是使用函数并传入索引。这甚至可以是一个立即触发的匿名函数。例如:

for(var i = 0; i < somethings.length; i++) {
    (function(i) {
        expect(someOtherThing.get(i).isDisplayed()).toBe(true);
    })(i);
}

希望有所帮助