在转到 twilio 无服务器函数中的下一行代码之前,如何让我的 for await 循环在其主体内执行所有操作?
How do I make my for await loop do everything within its body before moving on to the next line of code in twilio serverless functions?
几天来我一直在研究这个问题,感觉我已经非常接近解决这个问题了。在继续下一行代码之前,我需要循环遍历一个对象并向对象中的每条记录发送一条文本消息。要发送的代码在本地隔离时有效。但我无法让它在 Twilio Functions 中运行。我的所有代码似乎都有效,但未发送短信。
for await (const contact of allItems) {
client.messages
.create({
body: "Hey " + contact.name + "!" + " " + message,
messagingServiceSid: messaging_service,
to: contact.key
});
};
// End Send Message to Each Contact
我附上了我认为有问题的部分代码。
我想做的是让这段代码 运行 完全完成,然后再继续接下来的几行并调用回调。
知道我怎么能做这样的事情吗?
此处为 Twilio 开发人员布道师。
这里的问题是您没有await
获取异步调用的实际结果。在本地,这无关紧要,但在 Twilio Functions 中,一旦您调用 callback
函数,所有已启动的异步调用都会终止。
要创建一个发出异步请求并等待它们全部完成的循环,您需要将 Promise.all
与 map
结合使用。在您的示例中,它应该如下所示:
function SendMessages(allItems, message, client, messagingService) {
const apiRequests = allItems.map((contact) => {
let usersName = contact.name;
return client.messages.create({
body: `Hey ${usersName}! ${message}`,
messagingServiceSid: messagingService,
to: contact.key,
});
})
return Promise.all(apiRequests);
}
在此函数中,我们映射联系人列表,返回我们尝试发送消息时创建的承诺。变量 apiRequests
成为代表对 API 的请求的承诺数组。然后我们可以在 Promise.all
中使用这个 promises 数组。 Promise.all
只有在它传递的所有承诺都已解决(或者如果一个承诺被拒绝)后才会解决。
我建议您阅读 ,因为这会带来一些您可能遇到的其他问题。
几天来我一直在研究这个问题,感觉我已经非常接近解决这个问题了。在继续下一行代码之前,我需要循环遍历一个对象并向对象中的每条记录发送一条文本消息。要发送的代码在本地隔离时有效。但我无法让它在 Twilio Functions 中运行。我的所有代码似乎都有效,但未发送短信。
for await (const contact of allItems) {
client.messages
.create({
body: "Hey " + contact.name + "!" + " " + message,
messagingServiceSid: messaging_service,
to: contact.key
});
};
// End Send Message to Each Contact
我附上了我认为有问题的部分代码。
我想做的是让这段代码 运行 完全完成,然后再继续接下来的几行并调用回调。
知道我怎么能做这样的事情吗?
此处为 Twilio 开发人员布道师。
这里的问题是您没有await
获取异步调用的实际结果。在本地,这无关紧要,但在 Twilio Functions 中,一旦您调用 callback
函数,所有已启动的异步调用都会终止。
要创建一个发出异步请求并等待它们全部完成的循环,您需要将 Promise.all
与 map
结合使用。在您的示例中,它应该如下所示:
function SendMessages(allItems, message, client, messagingService) {
const apiRequests = allItems.map((contact) => {
let usersName = contact.name;
return client.messages.create({
body: `Hey ${usersName}! ${message}`,
messagingServiceSid: messagingService,
to: contact.key,
});
})
return Promise.all(apiRequests);
}
在此函数中,我们映射联系人列表,返回我们尝试发送消息时创建的承诺。变量 apiRequests
成为代表对 API 的请求的承诺数组。然后我们可以在 Promise.all
中使用这个 promises 数组。 Promise.all
只有在它传递的所有承诺都已解决(或者如果一个承诺被拒绝)后才会解决。
我建议您阅读