javascript - 那我们能得到当前的 promise 吗?

标签 javascript loops recursion promise

我想有一些机制来重做然后在 promise 中发挥作用。继续这样做,直到它通过一些检查

somePromise.then(() => {
    if(state == "finish")
        return;

    // DoSomething async then repeat these codes
    // could we do it by [return this;] ?
}).then(() => console.log("finish"));

最佳答案

通常,您无法访问 .then() 处理程序中的当前 promise 。而且,在大多数情况下,您无论如何也无法做任何有用的事情。添加另一个 .then() 处理程序与您已经使用的 .then() 处理程序没有任何不同。一旦履行, promise 永远不会改变它们的状态。

如果你想重复一些事情,你可以从你想重复的事情中创建一个函数,然后从 .then() 处理程序中再次调用它,然后返回结果 promise (从而将其链接到之前的 promise )。

这是一个例子:

// 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
});

关于javascript - 那我们能得到当前的 promise 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38758089/

相关文章:

javascript - 如何使用 anchor 标记中具有javascript的Htmlunit从网页下载文件

javascript - Chrome 扩展 : Communication between content script and background. html

python - Pathos 处理池递归限制

javascript - 如何编辑 JS 使其适用于两个 Id?

Javascript 数组奇怪的行为

matlab - 向量化间隔限制表中的查找值

java - For 循环头中的循环计算

php - 如何在 php 输出站点地图中打印所有可能的字符串(39 个非百万字符串)混合符号

recursion - Go 中的组合和

java - 使用邻接矩阵进行深度优先搜索?