for循环回调内的异步请求(facebook messenger bot)

时间:2018-01-11 14:41:00

标签: javascript node.js facebook asynchronous facebook-messenger

我正在尝试向我订阅的用户发送自动新闻消息(+ -8000), 为此,我使用for循环来传递每个用户。 问题是我在我的for循环内部的异步函数的回调中使用异步函数,但我的机器人发送所有文本然后所有泛型,所以它可能需要长达8分钟的用户beetween收到文本和通用的。

这是我的代码:

for (user of userList) {
  sendText({
      id: user.id,
      text: Sometext
    },
    //////CALLBACK/////////

    (err, data) => {
      if (err) {
        console.err("text => " + err)
      }
      console.log(`Text send ${user}`)

      /////IT SHOULD SEND THE GENERIC EVERYTIME WHEN THE TEXT CALLBACK

      sendGeneric({
          id: user.id,
          elements: elements
        },
        //////CALLBACK/////////
        (err, data) => {
          if (err) {
            console.err("Generic => " + err)
          }
          console.log(`carousel  send ${user}`);
        })
    })
}

然后在我的日志中我得到了

Text send user1
Text send user2
Text send user4
Text send user5
Text send user3


carousel send user1
carousel send user4
carousel send user2
carousel send user5
carousel send user3

1 个答案:

答案 0 :(得分:0)

那么,sendTextsendGeneric是异步函数吗?因为你永远不会等他们。

此外,如果你支持最新的ecmascript,你可以用forync包装for循环的函数,然后等待每个sendText

var someFunc = async function() {
     //Some code ...
     for(user of userList){
         await sendText(/*your function*/);
     }
}

如果您不支持async / await的最新ecmascript,那么您可以为每次迭代链接.then(类似于队列)