javascript - 从 Nodejs 中的函数返回数组并将其发送到 ejs View ?

标签 javascript node.js express

好的,我的代码是使用官方 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/

相关文章:

javascript - 有什么解决方法可以通过搜索其中的值来覆盖/下载 json 文件吗?

javascript - props.clickHandler 不是一个函数(ReactJS)

javascript - 我如何发送 CSRF token

node.js - 压入数组返回 Object 对象

node.js - Express Node.js Controller 不等待数据操作并返回旧数据

javascript - 使用 Promise-mysql 导出 MySQL 连接以便与 Node/Express 中的其他模块一起使用?

javascript - Angular.js ng-repeat 带条件

javascript - 从连接到 Raspberry Pi 的两个 RFID RC522 读取器读取序列号、时间戳等数据

node.js - Winston 没有为我的 Heroku MERN 应用程序编写日志,尽管它在本地运行良好

node.js - foreman 在 Node.js 中启动时出现错误