NodeJS - 如果不满足所需的结果,则连续调用函数(异步)

时间:2017-10-29 20:31:07

标签: node.js asynchronous

Node仍然相对较新,而且它具有非阻塞特性。

我为我想要制作的所需桌面应用程序的后端编写了一个API模块。调用每个方法时,它返回一个对象。下面是两个例子。

{ success: 1, response: RESPONSE }
{ success: 0, msg: ERROR_MSG }

1是成功的操作,0不是。

我想要做的是现在开始将后端API链接到主程序。我想从模块中调用一个函数,如果我的成功代码为1,则继续执行下一个操作,如果0等待所需的时间(1000ms)并重试操作,则所有操作都会阻止事件循环。

感谢。

1 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点,它们都取决于你的具体情况。既然你不能发布代码,我们所能做的最好就是在黑暗中刺伤。这是一个返回对象的异步函数。它大约3/4的时间返回一个失败的对象。接下来,我们可以每秒调用此函数,直到它使用简单的setInterval

返回成功

function asyncFn() {
  return new Promise((resolve) => {
    setTimeout(() => {
      const options = [{
          success: true,
          response: 'RESPONSE'
        },
        {
          success: false,
          msg: 'ERROR_MSG'
        }
      ]
      resolve(Math.random() > .75 ? options[0] : options[1])
    })
  })
}


const interval = setInterval(() => {
  asyncFn().then(result => {
    if (!result.success) {
      console.log("failed: ", result)
      return
    }
    clearInterval(interval)
    console.log("success: ", result)
  })
}, 1000)

如果您的代码明显不同,那么您可能需要弄清楚如何发布一些代码或创建一个最小的示例。