假设我有这样的场景:
a)如果响应数据没问题 - 完成Promise +然后链;
b)如果响应数据不正确 - 制作新的Promise +然后链 - 返回第2点。
和像这样的代码
var _p;
function make_promise(){
return new Promise(function(resolve, reject){
//get data
var data = 'some data';
resolve(data);
})
}
function handle_response(data) {
var _p;
if (data == 'some data'){
console.log(data);
//finish then chain
}
if (data != 'some data') {
_p = make_promise()
.then(handle_response);
}
}
_p = make_promise()
.then(handle_respone);
在执行流程b)
时,每次迭代选择此代码将在handle_response
函数内创建新的承诺。
这个新承诺会取代旧的还是会在关闭时保存?
如果新的承诺将被保存在关闭中如何避免这种情况?不保存_p变量的新承诺?
答案 0 :(得分:0)
我认为你真正想要的是
function getResponse() {
return make_promise().then(function handle_response(data) {
if (data == 'some data'){
console.log(data);
//finish then chain
} else {
return getResponse(); // repeat, recursively
}
}
}
var p = getResponse();
重要部分是return
,它使得返回的保证与递归调用的结果一起解决 - 也就是说,p
将始终只在“链”被“完成”时才会实现。 / p>