Node.js:来自一个函数的多个回调

用户名

我在应用程序的代码中遇到了问题,我想知道处理该问题的最佳方法:我有一个在回调函数上应用5个值的函数,我想知道使用它的最佳方法。

这是我的功能代码:

var someFunc = function(callback) {
var http = require('http');
var id;
var url = 'http://somesite.com/json';


// First request to get an array of 5 elements
http.get(url, function(res) {
    var body = '';

    res.on('data', function(chunk) {
        body += chunk;
    });

    res.on('end', function() {
        var jsonResult = JSON.parse(body);
// 5 requests with a value from each of the 5 elements
        for (var i=0;i<5;i++)
        {
            (function(idx) {
                gameId = jsonResult.gameList[idx].id;
                url = 'http://somesite.com' + id + '/token';
                http.get(url, function(res) {
                    var body = '';

                    res.on('data', function(chunk) {
                        body += chunk;
                    });

                    res.on('end', function() {
                        jsonRes = JSON.parse(body);
                        callback.apply(null, [idx, jsonRes.interestScore]);
                    });
                }).on('error', function(e) {
                    console.log("Got error: ", e);
                });
            })(i);
        }

    });
}).on('error', function(e) {
    console.log("Got error: ", e);
});
};
exports.someFunc = someFunc;

当我调用该函数以检索5个值时,我这样做如下:

exports.featured = function(req, res){
    getSome.someFunc(function callback(result) {
        var variables = {};
        var variableName = result;
        variables[variableName] = jsonRes.interestScore;
        res.render('featured', { score0: variables[0], score1: variables[1], score2: variables[2], score3: variables[3], score4: variables[4] });
    });
};

不幸的是,在函数仅检索到1个值之后调用了“ res.render”,因此我想知道如何正确地执行此操作或进行适当的回调。

谢谢。

克拉西米尔

我看到的第一个问题是您为结束事件分配了五次侦听器您只能这样做一次。您可以收集五次结果,然后再调用回调。这是使用请求模块的示例:

var request = require('request');

var makeRequests = function(callback) {
    var result = [],
        done = 0;
    request('http://www.google.com', function (error, response, body) {
        if (!error && response.statusCode == 200) {
            // read the body here
            var searchFor = [
                'nodejs',       // 1
                'http request', // 2
                'npm',          // 3
                'express',      // 4
                'javascript'    // 5
            ];
            for(var i=0; keyword = searchFor[i]; i++) {
                request('https://www.google.bg/search?q=' + keyword, function (error, response, body) {
                    if (!error && response.statusCode == 200) {
                        result.push(body);
                        ++done;
                        if(done == searchFor.length) {
                            callback(result);
                        }
                    }
                });
            }
        }
    });
}

makeRequests(function(result) {
    console.log("result=" + result.length);
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

来自node.js的回调函数

如何传递一个函数作为 Node.js 中另一个函数的回调?

具有一个响应的多个回调-Node JS

Node.js异步循环,下一个循环之前从函数进行回调

Node.js - TypeError [ERR_INVALID_CALLBACK]:回调必须是一个函数

TypeError [ERR_INVALID_CALLBACK]:回调必须是一个函数。在Node.js中收到未定义

Node.js 错误:Route.post() 需要一个回调函数,但得到了一个 [object Object]

在MongoDB,Node.js中使用一个成功回调Mongoose保存一个以上的实体

回调函数问题Node.js

Node js函数需要返回值,但是值来自回调,因此无法返回

来自https响应的回调函数未在Node.js中触发

Node.js如何知道回调的第一个参数是否是错误处理程序?

Node.js如何从异步回调中返回数组以在另一个文件中使用

如何从 node js 中的函数返回多个参数,一个作为接口,另一个作为变量

错误:Route.get()需要回调函数,但得到了一个[object Undefined] NODE.JS + SQL

类型错误:在带有 SQL 查询的 Node js 中提供时,参数回调必须是一个函数

Node.JS函数返回异步回调函数的值

在 Node.js 中,如何在主应用程序中存储来自模块函数的回调数据?

从Node.Js中的一系列回调函数返回结果

Node.js使用多个回调的正确方法

多个Node.js回调存在问题

Node.JS-如何转义多个嵌套的回调?

Node.js中的多个mysql查询和回调

整合node.js模块导出中的多个回调

从C ++回调函数发出Node.js事件

TypeError:回调不是Node.js中的函数

Node js中的回调函数是否以同步方式执行?

为什么Node.js不执行回调函数?

如何在node.js中执行回调函数?