我试图遍历一个数组以顺序在Twilio中发送多个消息。但是在Whatsapp的最终输出中,顺序不是顺序的。例如,它按以下顺序显示:图像2->图像1->图像3。我试图使用 async / await 库,但是它没有帮助。
我尝试了 .reduce ,以及普通的 for循环,并在循环内进行了 await 。
数组:
str.text = ["Image 1", "Image 2", "Image 3"]
str.images = ["https://hatrabbits.com/wp-content/uploads/2017/01/random.jpg", "https://images.unsplash.com/photo-1494253109108-2e30c049369b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80", "https://www.computerhope.com/jargon/r/random-dice.jpg", ]
代码:
function sendMsg(img, txt) {
context.getTwilioClient().messages.create({
to: event.From,
from: 'whatsapp:' + context.WHATSAPP_NUMBER,
body: txt,
mediaUrl: img
}).then(message => {
callback();
}).catch(err => callback(err));
}
async function test(str) {
(str.text).reduce(async (previousPromise, value, i) => {
await previousPromise;
return sendMsg(str.images[i], str.text[i])
}, Promise.resolve());
}
request.post({
...
}, function (err, res, body) {
var str = body.data.message;
test(str);
}
答案 0 :(得分:0)
看起来您正在混合回调,但没有正确返回内容就做出了承诺。我会改变自己的看法
request.post
for..of
循环按顺序处理它们类似这样的东西
str.text = ["Image 1", "Image 2", "Image 3"]
str.images = ["https://hatrabbits.com/wp-content/uploads/2017/01/random.jpg", "https://images.unsplash.com/photo-1494253109108-2e30c049369b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80", "https://www.computerhope.com/jargon/r/random-dice.jpg"];
function sendMsg(img, txt) {
return context.getTwilioClient().messages.create({
to: event.From,
from: 'whatsapp:' + context.WHATSAPP_NUMBER,
body: txt,
mediaUrl: img
}).catch(err => console.log(err));
}
async function test(str) {
for (const [index, value] of str.text) {
await sendMsg(str.images[index], str.text[index]);
}
}
request.post({
...
}, async function (err, res, body) {
var str = body.data.message;
await test(str);
}
答案 1 :(得分:0)
var items = [
{
text: "Image 1",
image: "https://hatrabbits.com/wp-content/uploads/2017/01/random.jpg"
},
{
text: "Image 2",
image: "https://images.unsplash.com/photo-1494253109108-2e30c049369b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80"
},
{
text: "Image 3",
image: "https://www.computerhope.com/jargon/r/random-dice.jpg"
}
];
sendMessage(items);
function sendMessage(items) {
// stop condition
if (!items.length) {
// return;
callback(null, '');
}
const currentItem = items.shift();
context.getTwilioClient().messages.create({
to: event.From,
from: 'whatsapp:' + context.WHATSAPP_NUMBER,
body: currentItem.text,
mediaUrl: currentItem.image
})
.then(message => {
setTimeout(sendMessage, 1500, items);
})
.catch(err => {
// return;
callback(err, null);
});
}
1500
中的setTimeout(sendMessage, 1500, items);
播放消息。