我需要不断调用远程 API 直到获得所需的响应,并且我想在 node.js 中使用官方 A+ promises。同步伪代码:
params = { remote api call params }
while (true) {
result = callRemoteApi(params)
if isGood(result) {
onSuccess(result)
break
}
params = modify(params)
}
我正在使用 request-promise请求的 lib,所以结果可能是这样的:
new Promise(function (resolve, reject) {
var task = request({params})
.then(function (result) {
if (isGood(result)) {
resolve(result);
} else {
task = request({new params}).then(this_function);
}
});
附言这与 https://stackoverflow.com/a/17238793/177275 非常相似, 但我想要一个非基于 q 的实现。
最佳答案
像这样的东西应该运作良好:
var remoteApiCall = function(num){
// fake function to resolve promise if random number in range
return new Promise(function(resolve, reject){
return ((Math.random()*10) < num)
? resolve(true)
: reject(false);
})
}
function getUntil(num){
return remoteApiCall(num).then(function(result){
if (result) {
return result
} else {
// call again until you get valid response
return getUntil(num)
}
})
}
getUntil(num).then(...)
关于javascript - 在 JavaScript/node.js 中使用 A+ promise 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28577114/