NodeJ在使用异步瀑布时面临的问题

时间:2019-06-01 12:39:27

标签: javascript node.js asynchronous ecmascript-6 async.js

我又一次调用了2个API请求1,因此我决定使用瀑布模型,但是我面临其中的问题

我已经做了很多尝试,但是无法解决问题。

下面是我的代码:

var unirest = require("unirest");
var async = require("async")

exports.user = (req, res, next) => {
    const qry = req.params.id
    async.waterfall([
        (nextCall) => {
            var req = unirest("GET", API_URL1);
            req.query({
               // some query
            });
            req.headers({
               // some headers 
            });
            req.end(function(subCount) {
                // if (resp.error) throw new Error(resp.error);
                var channelSubCount = subCount.body
                nextCall(null, data)
            });
        },
        (data, nextCall => {
            console.log(channelSubCount, 'data')
            var reqs = unirest("GET", API_URL2);

            reqs.query({
              // some query
            });

            reqs.headers({
                // some headers
            });

            reqs.end(function(res) {
                // if (res.error) throw new Error(res.error);
                console.log(res.body);
                return nextCall(null, {
                    name: 'abc',
                    photo: 'src',
                    count: data
                })
            });
        })
    ], function(finalData) {
        // if (error) { alert('Something is wrong!'); }
        console.log('final')
        res.status(200).json(
            finalData
        );
    });
};

错误: 参考错误:数据未定义

我不明白为什么会这样。

另外,请向我展示通过优化实现上述操作的正确方法。

任何帮助表示赞赏...

1 个答案:

答案 0 :(得分:1)

好像您忘了在第二个箭头函数定义中的此处关闭括号:

(data, nextCall => {

它仍然是有效的JavaScript,但现在解释器将data视为函数传入参数(根据需要)而不是变量。但是它没有在任何地方定义,因此您会遇到该错误。

使它像这样,它将起作用:

(data, nextCall) => {