将函数传递给 Node.js 中的嵌套回调

Passing function to nested callback in Node.js

本文关键字:嵌套 回调 js Node 函数      更新时间:2023-09-26

我正在尝试了解如何执行几个异步请求,但将a函数传递给回调。就像下面在我的 GetPosts() 中一样,我正在传递一个函数。所以我的问题是我如何处理 async.series 函数中的回调,同时能够传入一个函数来处理来自该系列的这些回调的回调。目前我正在调用 cb 但不是"回调",但不确定解决方法是什么。这有意义吗?

var request = require("request");
var async = require("async");
Context.prototype.GetPosts = function (params, cb) {
    async.series({
        one: function (callback) {
            request("http://jsonplaceholder.typicode.com/posts/1", function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    return cb(body);
                }
                cb(null, result);
            });
        },
        two: function (callback) {
            request("http://jsonplaceholder.typicode.com/posts/1", function (error, response, body) {
                if (!error && response.statusCode == 200) {
                    return cb(body);
                }
                cb(null, result);
            });
        }
    },
    function (err, results) {
    });
};
var params = new Params("MyPosts");
Context.GetPosts(params, function (cb) {
    console.log("Response: " + cb);
});

提前谢谢你。

你调用callback你现在调用cb的地方,让Async知道是时候继续前进了,然后在GetPosts函数底部的最后一个回调中调用cb,因为它在整个系列完成后触发。

传递错误,以便您可以在回调中处理它们GetPosts

var request = require("request");
var async   = request("async");
Context.prototype.GetPosts = function (params, cb) {
    async.series({
        one: function (callback) {
            request("http://jsonplaceholder.typicode.com/posts/1", function (error, response, body) {
                if (error) return callback(error, null);
                if (response.statusCode == 200) return callback(null, body);
                return callback('err', null);
            });
        },
        two: function (callback) {
            request("http://jsonplaceholder.typicode.com/posts/1", function (error, response, body) {
                if (error) return callback(error, null);
                if (response.statusCode == 200) return callback(null, body);
                return callback('err', null);
            });
        }
    },
    function (err, results) {
        if (err) {
            return cb(err, null);
        } else {
            return cb(null, results);
        }
    });
};
var ctx = new Context();
ctx.GetPosts(new Params("MyPosts"), function (err, data) {
    if (err) {
        // handle error
    } else {
        console.log("Response: " + data);
    }        
});