NodeJ сталкиваются с проблемой при использовании асинхронного водопада - PullRequest
0 голосов
/ 01 июня 2019

Я вызываю 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 Ответ

2 голосов
/ 01 июня 2019

Похоже, вы забыли закрыть круглые скобки здесь при определении функции второй стрелки:

(data, nextCall => {

Это все еще допустимый JavaScript, но теперь интерпретатор обрабатывает data не как входящий параметр функции (как вынужно), но как переменная.Но она нигде не определена, поэтому у вас есть эта ошибка.

Сделайте так, и она будет работать:

(data, nextCall) => {
...