当前位置: 首页 > 知识库问答 >
问题:

promise-尝试直到成功[重复]

林亦
2023-03-14

我使用的是Node.js的promise,这里的问题确实给了我一点意义。基本上,我有一个如下的函数:

var foo = foo (resolve, reject) {
    return obj
        .doA()
        .doB()
        .then(function (value) {
            // here I choose if I want to resolve or reject.
        })
        .catch(function(err) {
        });
}

var promise = new Promise(foo);

return promise
    .then(function() {
        // I know here what I have to return.
    })
    .catch(function(err){
        // I want to repeat the foo function until it is resolved and not rejected. 
    })

obj是promise对象。我想重试foo函数,只要promise实现;如果被拒绝,那么再试一次。

我不知道如何构造链条。有人帮忙吗?谢了。

共有1个答案

晋俊贤
2023-03-14

尝试使用递归在foo的声明中包含函数

function foo() {

  var n = String(new Date().getTime()).slice(-1);
  // if `n` < 5 reject `n` , else resolve `n`
  return Promise[n < 5 ? "reject" : "resolve"](n)
    .then(function(value) {
      return value
        // here I choose if I want to resolve or reject.
    })
    .catch(function(err) {
      return Promise.reject(["rejected", err])
    });
}

(function repeat() {
  var promise = Promise.resolve(foo());

  return promise
    .then(function(data) {
      console.log("complete", data)
        // I know here what I have to return.
    })
    .catch(function(err) {
        // I want to repeat the foo function until it is resolved and not rejected. 
      console.log(err);
      if (err[0] === "rejected") repeat()
    })
}())
 类似资料:
  • 问题内容: 我正在尝试从我的应用程序发送紧急短信。我必须确保SMS发送成功。 在Android系统启动后并进行检查后,将发送SMS。 因此,我有一个处理BOOT_COMPLETED意向过滤器的服务类。此类进行检查,如果内容正确,则尝试通过另一个“扩展服务”类发送SMS消息 确保成功发送短信后,两个服务(处理启动呼叫的服务和发送短信的服务)都必须退出。 问题1 :如何使我的短信发送功能在超时的情况下

  • 问题内容: 我听到这样的观点,您应该完全避免使用try / catch,因为它占用很多资源。那么诺言错误处理会更快吗?还是没关系? UPD :我知道try / catch在内部的异步代码中不起作用。我只是在想是否由于性能问题而有任何避免使用try / catch的理由?以上两种方法之间有什么区别吗? UPD2 :试着跑我的马:) https://jsperf.com/try-catch-vs- p

  • 我实现了以下代码来处理我未来的完成,它编译得很好 我对它的工作原理有点困惑,我假设它确实如此,因为我从Scala文档中的类似示例中复制了它 我知道onComplete需要一个函数,该函数将尝试作为输入,成功和失败都是从尝试扩展而来的case类 我不明白的是,如果不首先进行某种类型的匹配,你怎么能在这些情况下进行。 这怎么可能在这里?

  • 在 scala 中,您将如何编写一个函数来获取期货序列,运行所有函数,不断重试任何失败的函数,并返回结果? 例如,签名可以是: 加分为一个可配置的超时,在这一点上的功能失败,被调用者可以处理这种情况。< br >如果错误案例处理程序可以接收失败的期货列表,则奖励加分。 谢谢!

  • 编辑 继续重试直到promise解决的模式(具有延迟和最大重试次数) #1的代码。不断重试,直到promise解决为止(语言社区有任何改进吗?) 使用 #2的代码继续重试,直到以可重用的方式产生结果(条件是会发生变化的)。

  • 因此,我不确定如何在.setOnAction事件期间计算节点的高度,我已尝试/不确定还要尝试什么我正在尝试在添加节点后查找vBox的高度,但它只是在添加新节点之前打印节点的高度 运行该示例,然后单击将标签添加到vBox并输出的按钮 实际结果: 预期结果: 但是如果你点击打印VBox高度按钮,它会显示正确的高度: