我正在尝试进行休息调用并更新列表,然后使用更新的列表解析承诺。
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()
请求已发布,我可以在测试轨道中创建测试,但解决方案(测试)没有newId分配。 这是我得到的输出。不确定为什么resolve不会等待其余的调用完成。
{ tests:
[ { id: '', name: 'test1'},
{ id: '', name: 'test2'},
{ id: '', name: 'test3'},
{ id: '', name: 'test4'},
{ id: '', name: 'test6'},
{ id: '', name: 'test5'} ] }
答案 0 :(得分:1)
compareTestRailAndProtractor
返回Promise
。您可以使用async/await
中的.then()
和Promise
循环中的for
构造函数来等待request
回调,这是问题代码中的问题,为{{1循环不等待回调函数
for
答案 1 :(得分:-1)
我认为这是因为Javascript的非阻塞特性。问题是&#34;解决(测试)&#34;在你的&#34; post&#34;之前执行event有一个响应(你从中获取Id)。
我建议你看看https://caolan.github.io/async/ Async是一个用于处理异步进程的神奇库。
祝你好运!编辑:您还可以查看async/await JS运营商