如何操作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的内容之前渲染的。