我需要在不同的登录凭据下测试各种端点。我目前正在循环遍历所有端点,但结果不会按照它们被调用的顺序出现,因为它们是异步的。
我需要使用特定密码遍历每个端点,并将结束点的结果推送到array1,然后使用password2获取端点的结果并将其推送到array2。
array1应该使用password1等于所有终点的结果 array2应该使用password2等于所有终点的结果
public runTests(endPoints, pass1, pass2):void {
for (let i = 0; i < endPoints.length; i++) {
this.test(endPoints[i], user1, pass1).then(result => {
this.array1.push(result);
});
this.test(endPoints[i], user2, pass2).then(result => {
this.array2.push(result);
});
}
}
我目前正在从我试图成功测试的所有端点获得结果,而不是确定我将如何将它们按照它们被称为任何建议的顺序存储在数组中,或者非常感谢协助。
答案 0 :(得分:0)
将两个this.test
异步函数调用包装到阻塞范围中,以通过在一个位置自行执行函数来保留i
的值。
<强>代码强>
public runTests(endPoints, pass1, pass2): void {
for (let i = 0; i < endPoints.length; i++) {
//self executing function
((index) => {
this.test(endPoints[index], user1, pass1).then(result => {
this.array1.push(result);
});
this.test(endPoints[index], user2, pass2).then(result => {
this.array2.push(result);
});
})(i); //passing value of `i`.
}
}
答案 1 :(得分:0)
要以相同的顺序调用所有承诺,您可以使用Promise
支持使用then
严格按顺序在单个流中链接其他承诺:
var p = new Promise();
for (let i = 0; i < endPoints.length; i++) {
p = p.then(function(index) {
return this.test(endPoints[index], user1, pass1).then(result => {
array1.push(result);
})
})(i));
}
p.then(function() {console.log(array1});
另外,请注意,您需要将异步调用包装到IIFE函数中以创建闭包并避免出现范围i
的问题。