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条评论
登录后参与评论

相关文章

来自分类Dev

来自node.js的回调函数

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Node.js异步系列-将参数传递给下一个回调

来自分类Dev

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

来自分类Dev

node.js回调函数dynamodb

来自分类Dev

回调函数问题Node.js

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

函数完成后,Node.js回调下一个循环

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

等待Node.js中的多个回调

来自分类Dev

多个Node.js回调存在问题

来自分类Dev

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

来自分类Dev

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

来自分类Dev

在Node.js中制作异步回调函数

来自分类Dev

如何在回调函数Node JS中打破for循环

来自分类Dev

将变量传递给Node.JS回调函数

来自分类Dev

Node.js从回调函数中提取值

来自分类Dev

没有回调的Node.js函数

Related 相关文章

  1. 1

    来自node.js的回调函数

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

    Node.js异步系列-将参数传递给下一个回调

  9. 9

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

  10. 10

    node.js回调函数dynamodb

  11. 11

    回调函数问题Node.js

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

    函数完成后,Node.js回调下一个循环

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

    等待Node.js中的多个回调

  22. 22

    多个Node.js回调存在问题

  23. 23

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

  24. 24

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

  25. 25

    在Node.js中制作异步回调函数

  26. 26

    如何在回调函数Node JS中打破for循环

  27. 27

    将变量传递给Node.JS回调函数

  28. 28

    Node.js从回调函数中提取值

  29. 29

    没有回调的Node.js函数

热门标签

归档