如何操作Twilio数据对象? 的NodeJS

我怎样才能把variables'数据'的信息放入新variables'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的使用移动到定义的callback中:

 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在callback运行之前没有被填充,但是在这种情况发生之前,你正在尝试使用这个值。

以下是您的原始代码,其中包含解释以什么顺序发生的注释:

 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调用属于callback。 您希望它在list调用完成后运行。

处理它是asynchronous。 基本上你的渲染是在它有callback的内容之前渲染的。