javascript - 显示多个API调用的结果

标签 javascript json node.js rest backend

我正在对后端服务器进行两次 API 调用,并使用以下方法向用户显示 json 中的两个响应。但是,根据控制台,警报 2 是“未定义”;并且警报 1 有效。我做错了什么?

app.get("/blah", function (req, res) {

    var alert = 'api call for alert' 
    var alert2 = 'api call for alert 2' 


    request(alert, alert2, function (error, response, alert, alert2) { 

        console.log(alert); 
        console.log(alert2);

        res.json({
            Alert: alert,
            Alert2: alert2
        });
    });
});

最佳答案

这是因为 request 不允许以这种方式从一个调用异步发出多个请求。

异步实现此目的的一种方法是使用 async 模块中的 async.parallel。

但是,为了简单起见,我将提供一个不需要异步模块的示例,而是以串行方式工作。

这不是最有效的方法,因为在您的示例中,第二个请求不需要首先完成第一个请求。

app.get("/blah", function (req, res) {

    var alert = 'api call for alert' 
    var alert2 = 'api call for alert 2' 

   request(alert, function (error, response, alert) { 

        console.log(alert);

        request(alert2, function (error, response, alert2) { 
            console.log(alert2);

            res.json({
                Alert: alert,
                Alert2: alert2
            });
        });
    });
});

异步示例 (https://github.com/caolan/async):

app.get("/blah", function (req, res) {

    var alert = 'api call for alert' 
    var alert2 = 'api call for alert 2'

    async.parallel([
        function(callback) {
            request(alert, function (error, response, alert) {
                if(error) {
                    callback(error);
                } else {
                    callback(null, alert);
                }
            });
        },

        function(callback) {
            request(alert2, function (error, response, alert2) {
                if(error) {
                    callback(error);
                } else {
                    callback(null, alert2);
                }
            });
        }
    ], function(err, results) {
        res.json({
            Alert: results[0],
            Alert2: results[1]
        });
    });
});

关于javascript - 显示多个API调用的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36391392/

相关文章:

JavaScript If/Else 样式改变

javascript - 从 ajax 响应访问返回数组的键值

node.js - Bluebird 在源代码中抛出异常

javascript - Cordova:适用于 Android 的 Facebook 插件构建错误

javascript - 获取通用数组时对表进行 ng-repeat

javascript - 如何创建在 document.write 中存活的 JS 事件监听器?

python - 将不带分隔符的单个 json 对象转换为可立即处理的有效 json 文件

javascript - Knockout.js 可观察绑定(bind)不更新(使用 JSON 映射)?

javascript - 在 NodeJS 中搜索前端与后端

javascript - 在 Node.js 中使用 Azure SendGrid 发送电子邮件