如何将信息放入变量'data'到新变量'newData'中?
var accountSid = '12345';
var authToken = "12345";
var client = require('twilio')(accountSid, authToken);
app.get("/results", function(req,res){
var query = req.query.search
var newData;
// Retrieve list of messages
client.messages.list(query, function(err, data) {
if(err){console.log(err)}
else {
// Pass info into 'newData'
newData = data;
}
});
console.log(newData);
res.render("results", {data: newData});
});
上面的代码导致未定义'newData'。
如果这样做:
else {
// Render raw 'data'
res.render("results", {data: data});
}
该代码工作正常。但是,我想在函数外部操作数据。
最佳答案
将对newData
的使用移到定义它的回调中:
app.get("/results", function (req,res){
var query = req.query.search
var newData;
// Retrieve list of messages
client.messages.list(query, function (err, data) {
if (err) { console.log(err); }
else {
newData = data;
res.render("results", { data: newData });
}
});
});
问题是
newData
在回调运行之前不会被填充,但是您正在尝试使用该值。这是您的原始代码,带有注释的注释说明了按什么顺序发生的情况:
app.get("/results", function (req,res){
// 1. This code runs first.
var query = req.query.search
var newData;
// 2. This call is made second.
client.messages.list(query, function (err, data) {
// 5. This code runs fifth, after the list call has completed.
if (err) { console.log(err); }
else {
// Pass info into 'newData'
newData = data;
}
});
// 3. This console.log is third.
console.log(newData);
// 4. This runs fourth, at which point the HTTP response has been sent.
res.render("results", { data: newData });
});
希望这样可以弄清楚为什么
res.render
调用属于回调函数。您希望它在list
调用完成后运行。关于javascript - 如何操纵Twilio数据对象? Node JS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46291086/