【发布时间】:2018-03-19 11:33:00
【问题描述】:
我正在尝试打一个休息电话并更新一个列表,然后用更新的列表解决这个承诺。
function addTestCaseToTestRail(){
return new Promise(function(resolve){
compareTestRailAndProtractor().then(function(tests){
var testsLength = tests.tests.length;
var url = testRailURL+testRailData.addTestEndPoint;
for(var i=0; i<testsLength; i++){
if(tests.tests[i].id==undefined){
var newId=""
var options = {
url:url,
headers:headers,
body:{
"title":tests.tests[i].name,
"custom_jira_component" : 465
},
json: true
}
request.post(options, function(err, httpResponse, body){
if (err) {
console.error(err);
return;
}
newId = body.id;
});
tests.tests[i].id = newId;
}
}
resolve(tests);
});
});
}
function test(){
addTestCaseToTestRail().then(function(tests){
console.log(tests);
});
}
test()
请求正在发布,我可以在测试轨道中创建测试,但 resolve(tests) 没有 newId 分配。 这是我得到的输出。不知道为什么 resolve 不等待其余调用完成。
{ tests:
[ { id: '', name: 'test1'},
{ id: '', name: 'test2'},
{ id: '', name: 'test3'},
{ id: '', name: 'test4'},
{ id: '', name: 'test6'},
{ id: '', name: 'test5'} ] }
【问题讨论】:
-
如果
if(tests.tests[i].id==undefined)评估为假会发生什么? -
没什么,只是继续循环迭代。我们可以假设所有的 id 都是未定义的
-
在您对
request()的任何调用实际完成之前,您正在解决承诺。它们是异步的。在您的for循环完成后,它们会稍后完成。这里还有许多其他问题/答案展示了如何处理此类问题。
标签: javascript node.js promise request