如何在Twilio函数间传递参数并让目标函数获取参数值
解决Twilio函数传参后event为undefined的问题
问题原因
你的CheckBusinessHours函数定义了三个参数context, event, callback,但调用时只传入了{"dessert":"yes"}这一个参数。此时这个对象会被赋值给第一个参数context,event参数自然就变成了undefined,所以console.log(event)输出undefined。
解决方案
根据你的函数是否需要异步操作,分两种处理方式:
方式一:同步函数(无异步操作)
如果CheckBusinessHours不需要执行异步任务(比如仅做数据计算、判断),可以调整参数定义或调用时传对参数:
方法1:简化目标函数参数
修改CheckForDessert函数,只保留需要的event参数:
exports.CheckBusinessHours = function(event) { console.log(event); // 此时会输出 {"dessert":"yes"} return 'blankText'; };
调用代码保持不变:
var AvailableToDial = Function.CheckBusinessHours({"dessert":"yes"});
方法2:调用时传入完整参数
如果需要保留context参数(比如要用到环境变量),调用时传入当前函数的context和目标event:
var AvailableToDial = Function.CheckBusinessHours(context, {"dessert":"yes"});
对应的CheckForDessert函数可以保留原参数定义,此时event就是传入的对象:
exports.CheckBusinessHours = function(context, event, callback) { console.log(event); // 输出 {"dessert":"yes"} return 'blankText'; };
方式二:异步函数(含异步操作)
如果CheckBusinessHours需要执行异步任务(比如调用API、数据库查询),必须使用callback模式,调用时要传全三个参数:
修改CheckForDessert函数:
exports.CheckBusinessHours = function(context, event, callback) { console.log(event); // 输出 {"dessert":"yes"} // 示例:模拟异步操作 setTimeout(() => { // 第一个参数为错误(无错误传null),第二个为返回结果 callback(null, 'blankText'); }, 1000); };
调用时改用异步回调方式(注意Twilio主函数本身是异步的,要在回调内完成后续逻辑再调用主函数的callback):
if(calledNumber == "+18008675309") { const TheFunction = Runtime.getFunctions()['CheckForDessert'].path; const Function = require(TheFunction); Function.CheckBusinessHours(context, {"dessert":"yes"}, (err, result) => { if (err) { // 处理错误,比如返回错误响应 return callback(err); } var AvailableToDial = result; // 继续后续业务逻辑 ... // 完成后调用主函数的callback返回响应 callback(null, /* 你的响应内容,比如Twiml对象 */); }); }
内容的提问来源于stack exchange,提问作者Highdel
相关产品推荐
相关产品推荐

