好的,我的代码是使用官方 API 从 yelp 业务中提取数据。我的问题是我似乎无法从函数中返回数据。问题不在于 ejs,而是当我告诉它时数据没有返回!我只是在一些尝试中得到了未定义的结果,而在其他尝试中(包括我将在此处显示的尝试),我得到了一个空数组。我只粘贴重要的代码,如果您需要更多代码,请告诉我!
function yelp(){
var b = [];
var i = 0;
(struck the initialization of client)
client.business("(struck)", function(error, data) {
if (error != undefined){
res.send("an error occured. exiting");
process.process.reallyExit();
}
b[i++] = data.name;
b[i++] = data.display_phone;
b[i++] = data.rating;
console.log(b); //NEW!!
});
console.log(b);
return b;
}
app.get('/yelp', function(req,res){
var arr = yelp();
console.log(arr);
res.render('yelp.ejs', {title: 'Yelp!', arr: arr});
});
}
我又添加了一行代码,我认为这可能已经将问题范围缩小到与我糟糕的互联网连接有关。我添加了另一个 console.log(b),这次是在业务 API 调用中。 console.log(arr) 显示第二个,console.log(b);就在 reutrn 首先显示之前,最后是 API 调用内的 console.log(b) 。该日志也花了整整 30 秒才出现,并且是在页面加载后出现的。那么,如何让页面等待数据呢?或者这与我的问题无关?
最佳答案
在不了解他们的 API 的情况下,我确实认识回调风格。然后,对客户端的调用结果将位于回调中的 data
参数中,这就是您要渲染 View 的位置。
以下内容未经测试。
function yelp(cb) {
var b = [];
var i = 0;
// (struck the initialization of client)
client.business("(struck)", function(error, data) {
if (error) {
return cb(error);
}
b[i++] = data.name;
b[i++] = data.display_phone;
b[i++] = data.rating;
});
console.log(b);
cb(null, b)
}
app.get('/yelp', function(req, res) {
yelp(function(err, arr) {
if (err) {
res.send("an error occured. exiting");
process.process.reallyExit();
return;
}
console.log(arr);
res.render('yelp.ejs', {
title: 'Yelp!',
arr: arr
});
});
});
这里要注意的是回调传递。这通常是你的做法 Node.js 中的异步工作。使用 promises 可以使它更漂亮一点.
关于javascript - 从 Nodejs 中的函数返回数组并将其发送到 ejs View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29215004/