我希望有一些机制可以重做然后在promise中运行。继续这样做,直到它通过一些检查
StoringPin
答案 0 :(得分:3)
通常,您无法访问.then()
处理程序中的当前承诺。并且,在大多数情况下,无论如何你都无法做任何有用的事情。添加另一个.then()
处理程序与您已经处于的.then()
处理程序没有任何不同。一旦完成,promises永远不会改变它们的状态。
如果你想重复一些事情,你可以用你想要重复的东西来创建一个函数,然后从.then()
处理程序中重新调用它,然后返回结果的承诺(从而将它链接到前一个许)。
以下是一个例子:
// utility delay function that returns a promise
function delay(t, val) {
return new Promise(function(resolve) {
setTimeout(function() {
resolve(val);
}, t);
});
}
// repeatedly call someAsyncOp() until we see the operation is finished
function repeatUntil(t) {
return someAsyncOp().then(function(state) {
if (state !== "finish") {
return delay(t).then(repeatUntil);
}
});
}
// sample usage
repeatUntil(5000).then(function() {
// state is finished here
}).catch(function(err) {
// error here
});
答案 1 :(得分:1)
您可以命名.then()
处使用的函数,在.then()
doSomethingAsync()
来电state == "finish"
之间递归调用同一函数,直到// name function used at `.then()`
somePromise.then(function re(data) {
if(state == "finish") {
return data;
};
// DoSomething async then repeat these codes
// call `re` at `.then()` chained to `doSomethingAsync()`
doSomethinAsync(data).then(re);
}).then((data) => console.log("finish", data));
validationLength = 10;
$('#jkeyboard').on('keyup keydown change keypress', function () {
if($(this).val().length > validationLength){
val=$(this).val().substr(0,$(this).val().length-1);
$(this).val(val);
};
});