我又一次调用了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
);
});
};
错误: 参考错误:数据未定义
我不明白为什么会这样。
另外,请向我展示通过优化实现上述操作的正确方法。
任何帮助表示赞赏...
答案 0 :(得分:1)
好像您忘了在第二个箭头函数定义中的此处关闭括号:
(data, nextCall => {
它仍然是有效的JavaScript,但现在解释器将data
视为函数传入参数(根据需要)而不是变量。但是它没有在任何地方定义,因此您会遇到该错误。
使它像这样,它将起作用:
(data, nextCall) => {