我正在尝试向我的订阅用户(+-8000)发送自动新闻消息,为此,我使用了一个for循环来传递每个用户。问题是我在for循环的异步函数的回调中使用了一个异步函数,但是我的bot发送了所有的文本,然后发送了所有的泛型,所以用户在收到文本和泛型之间可能需要8分钟的时间。
下面是我的代码:
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
发布于 2018-01-11 23:17:59
那么,sendText
和sendGeneric
是异步函数吗?因为你从来不会等他们。
此外,如果您支持最新的ecmascript,您可以将for循环中的函数与异步封装在一起,然后等待每个sendText
var someFunc = async function() {
//Some code ...
for(user of userList){
await sendText(/*your function*/);
}
}
如果你不支持异步/等待的最新ecmascript,那么你可以为每次迭代链接队列(类似.then
)
https://stackoverflow.com/questions/48209650
复制相似问题