Twilio 函数请求超时
Twilio functions request time out
你好我想从 Apis 获取数据并在循环中检查记录,其中 运行s 6 次和 return 数据 3 天。但是当我从工作室流程中制作这个功能 运行 时,我遇到了请求超时问题。点击 3 到 4 次后功能开始正常工作。然后在第二天,当我们再次尝试工作正常时,我们面临同样的问题。我想我的代码或其他问题有问题。请给我解决此超时问题的最佳解决方案。
我的功能代码在这里:
const axios = require('axios');
exports.handler = async (context, event, callback) => {
// Create a new voice response object
const twiml = new Twilio.twiml.VoiceResponse();
let Max_date = new Date();
// console.log("today:",Max_date);
let Min_date = new Date();
var date = new Date();
Min_date.setDate(Min_date.getDate()-3);
var toText = event.phone.toString(); //convert to string
var originalphone="("+toText.charAt(2)+toText.charAt(3)+toText.charAt(4)+")"+" "+toText.charAt(5)+toText.charAt(6)+toText.charAt(7)+"-"+toText.charAt(8)+toText.charAt(9)+toText.charAt(10)+toText.charAt(11);
var OrderId=0;
var OrderUrl="";
var fullfillmentstatus=null;
var fullfillment=0;
try {
for(let j = 0; j<6 ; j++)
{
var Url1="Api_Url";
const response = await axios.get(Url1);
for (let i = 0; i <250 ; i++)
{
//console.log(i);
if(response.data.orders[i]!=null)
{
if(response.data.orders[i].shipping_address!=null)
{
if(response.data.orders[i].shipping_address.phone==originalphone || response.data.orders[i].shipping_address.phone==event.phone)
{
OrderId=response.data.orders[i].order_number;
OrderUrl=response.data.orders[i].order_status_url;
fullfillmentstatus=response.data.orders[i].fulfillment_status;
if(fullfillmentstatus==null)
{
fullfillment=0;
}
else
{
fullfillment=1;
}
i=249;
j=19;
}
}
}
if(response.data.orders[i]==null)
{
i=249;
}
}
Min_date.setDate(Min_date.getDate()-3);
Max_date.setDate(Max_date.getDate()-3);
console.log(Max_date);
//console.log(j);
}
return callback(null, {fullfillments: fullfillment,orderid: OrderId,orderurl:OrderUrl});
} catch (error) {
console.error(error);
return callback(error,twiml);
}
};
此处为 Twilio 开发人员布道师。
Twilio Functions 有一个 10 second execution time limit。我的猜测是发出 6 次请求并循环处理结果所花费的时间比这要长。
我还猜测您 运行 循环 6 次以请求相同的 API,因为您正在等待前 5 次可能不存在的结果。如果是这种情况,那么我建议重写您的函数以仅调用 API 一次,然后 return 如果您拥有要查找的数据,则失败或成功。然后,在您的 Studio 流程中,您可以发出请求并使用 Split 小部件进行跟踪。该 Split 小部件会检查您是否有数据。如果是,则流程继续,但如果不是,您将再次循环到函数小部件并再次调用调用 API 的函数。您还可以添加一个可用作计数器的设置变量小部件和另一个拆分小部件,这样您就不会永远循环下去。
你好我想从 Apis 获取数据并在循环中检查记录,其中 运行s 6 次和 return 数据 3 天。但是当我从工作室流程中制作这个功能 运行 时,我遇到了请求超时问题。点击 3 到 4 次后功能开始正常工作。然后在第二天,当我们再次尝试工作正常时,我们面临同样的问题。我想我的代码或其他问题有问题。请给我解决此超时问题的最佳解决方案。
我的功能代码在这里:
const axios = require('axios');
exports.handler = async (context, event, callback) => {
// Create a new voice response object
const twiml = new Twilio.twiml.VoiceResponse();
let Max_date = new Date();
// console.log("today:",Max_date);
let Min_date = new Date();
var date = new Date();
Min_date.setDate(Min_date.getDate()-3);
var toText = event.phone.toString(); //convert to string
var originalphone="("+toText.charAt(2)+toText.charAt(3)+toText.charAt(4)+")"+" "+toText.charAt(5)+toText.charAt(6)+toText.charAt(7)+"-"+toText.charAt(8)+toText.charAt(9)+toText.charAt(10)+toText.charAt(11);
var OrderId=0;
var OrderUrl="";
var fullfillmentstatus=null;
var fullfillment=0;
try {
for(let j = 0; j<6 ; j++)
{
var Url1="Api_Url";
const response = await axios.get(Url1);
for (let i = 0; i <250 ; i++)
{
//console.log(i);
if(response.data.orders[i]!=null)
{
if(response.data.orders[i].shipping_address!=null)
{
if(response.data.orders[i].shipping_address.phone==originalphone || response.data.orders[i].shipping_address.phone==event.phone)
{
OrderId=response.data.orders[i].order_number;
OrderUrl=response.data.orders[i].order_status_url;
fullfillmentstatus=response.data.orders[i].fulfillment_status;
if(fullfillmentstatus==null)
{
fullfillment=0;
}
else
{
fullfillment=1;
}
i=249;
j=19;
}
}
}
if(response.data.orders[i]==null)
{
i=249;
}
}
Min_date.setDate(Min_date.getDate()-3);
Max_date.setDate(Max_date.getDate()-3);
console.log(Max_date);
//console.log(j);
}
return callback(null, {fullfillments: fullfillment,orderid: OrderId,orderurl:OrderUrl});
} catch (error) {
console.error(error);
return callback(error,twiml);
}
};
此处为 Twilio 开发人员布道师。
Twilio Functions 有一个 10 second execution time limit。我的猜测是发出 6 次请求并循环处理结果所花费的时间比这要长。
我还猜测您 运行 循环 6 次以请求相同的 API,因为您正在等待前 5 次可能不存在的结果。如果是这种情况,那么我建议重写您的函数以仅调用 API 一次,然后 return 如果您拥有要查找的数据,则失败或成功。然后,在您的 Studio 流程中,您可以发出请求并使用 Split 小部件进行跟踪。该 Split 小部件会检查您是否有数据。如果是,则流程继续,但如果不是,您将再次循环到函数小部件并再次调用调用 API 的函数。您还可以添加一个可用作计数器的设置变量小部件和另一个拆分小部件,这样您就不会永远循环下去。