Node.js Twilio Node JS-过滤每个电话号码的短信
我想使用REST API过滤每个电话号码和发送日期的短信,但是以下代码的输出在client.messages.each()块之外不可用。 请告知我如何使用发送到过滤号码的最新短信代码:Node.js Twilio Node JS-过滤每个电话号码的短信,node.js,rest,twilio,Node.js,Rest,Twilio,我想使用REST API过滤每个电话号码和发送日期的短信,但是以下代码的输出在client.messages.each()块之外不可用。 请告知我如何使用发送到过滤号码的最新短信代码: const filterOpts = { to: '+13075550185', dateSent: moment().utc().format('YYYY-MM-DD') }; let pattern = /([0-9]{1,})$/; let codeCollection = []; client.m
const filterOpts = {
to: '+13075550185',
dateSent: moment().utc().format('YYYY-MM-DD')
};
let pattern = /([0-9]{1,})$/;
let codeCollection = [];
client.messages.each(filterOpts, (record) => {
codeCollection.push(record.body.match(pattern)[0]);
console.log(record.body.match(pattern)[0], record.dateSent);
});
console.log(codeCollection,'I get an empty array here');//how to get
the latest sms and use it
doSomethingWithSMS(codeCollection[0]);
您有权访问消息数组的长度吗?如果是这样,你可以这样做
const filterOpts = {
to: '+13075550185',
dateSent: moment().utc().format('YYYY-MM-DD')
};
let pattern = /([0-9]{1,})$/;
let codeCollection = [];
var i = 0
client.messages.each(filterOpts, (record) => {
if (i < messages.length){
codeCollection.push(record.body.match(pattern)[0]);
console.log(record.body.match(pattern)[0], record.dateSent);
i++;
else {
nextFunction(codeCollection);
}
});
function nextFunction(codeCollection){
console.log(codeCollection,'I get an empty array here');
doSomethingWithSMS(codeCollection[0]);
}
const filterOpts={
致:“+13075550185”,
dateSent:moment().utc().format('YYYY-MM-DD')
};
let pattern=/([0-9]{1,})$/;
让codeCollection=[];
变量i=0
client.messages.each(filterOpts,(record)=>{
if(i
消息。each()
是异步运行的,因此当客户端.messages()
东西在后台线程上运行时,您的主线程将转到下一个调用。因此,在您尝试访问它时,没有任何内容被推送到codeCollection。您需要以某种方式等待each()在继续之前完成。Twilio客户端使用主干样式的承诺,因此您可以向链添加另一个.then()链接,如下所示。您还可以使用类似async的库,它允许您使用Wait以更线性的方式编写异步代码
const filterOpts = {
to: '+13075550185',
dateSent: moment().utc().format('YYYY-MM-DD')
};
let pattern = /([0-9]{1,})$/;
let codeCollection = [];
client.messages.each(filterOpts, (record) => {
codeCollection.push(record.body.match(pattern)[0]);
console.log(record.body.match(pattern)[0], record.dateSent);
}).then(
function() {
console.log(codeCollection,'I get an empty array here');
if( codeCollection.count > 0 ) doSomethingWithSMS(codeCollection[0]);
}
);
这里是Twilio开发者福音传道者 实际上,不会返回一个
Promise
。您可以在每个流式处理结果完成后运行回调函数,方法是将其作为done
传递到选项中,如下所示:
const codeCollection = [];
const pattern = /([0-9]{1,})$/;
const filterOpts = {
to: '+13075550185',
dateSent: moment().utc().format('YYYY-MM-DD'),
done: (err) => {
if (err) { console.error(err); return; }
console.log(codeCollection);
doSomethingWithSMS(codeCollection[0]);
}
};
client.messages.each(filterOpts, (record) => {
codeCollection.push(record.body.match(pattern)[0]);
console.log(record.body.match(pattern)[0], record.dateSent);
});
让我知道这是否有帮助。你得到一个空数组的控制台.log
很可能在你的记录被推入回调函数的内部之前被执行。试着在内登录。每个在被推入codeCollection
是之后。但是我需要调用另一个函数,只需使用最新的sms代码即可。each()中的console.log将返回今天发送的电话号码的所有代码。如果没有,则必须执行单独的异步调用才能获取消息数。我无法访问client.messages.each()之外的数组我可以在该块内部预览输出,但不能在该块外部预览输出。也不能使用。then to chain promiss,因为它看起来是client.messages.each不会返回promissA问题。库是否需要提供对异步/承诺的支持才能使用。然后()例如?@db2791根据我的经验,我使用过的所有具有异步功能的库都与主干风格的承诺兼容,即..then()起作用。这并不是说这是一个普遍的事实,但我从来没有在我的任何项目中显式地包括主干,并且一直使用。then()当使用asynchronasity时。async是一个独立的库,它使使用异步函数变得更简洁。我相信它实际上内置在node的更高版本中。可能是node默认包含主干样式承诺?我所有的javascript应用程序都使用node。因此,很抱歉,我无法明确回答您的问题,but我希望这会有帮助。Twilio似乎是同步运行代码的,因此如果我想链接promise,就无法读取未定义的属性'then'。基本上是console.log()每个块的内部显示输出,因此代码必须是同步的。每个块内部的console.log的输出是例如:3164 2018-03-02T13:56:39.000Z 0778 2018-03-02T13:54:49.000Z 1883 2018-03-02T13:51:22.000Z 7753 2018-03-02T13:50:04.000Z但是,如何获得每个块外部的记录?提供的解决方案不起作用