NodeJs 在使用异步瀑布时面临的问题
NodeJs facing the issue while using async waterfall
我一个接一个地调用 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
);
});
};
错误:
引用错误:数据未定义
我不明白为什么会这样。
还有一些请告诉我通过优化实现上述内容的正确方法。
感谢任何帮助...
您似乎忘记在第二个箭头函数定义中关闭括号:
(data, nextCall => {
它仍然是一个有效的 JavaScript,但是解释器现在不再将 data
视为函数传入参数(如您需要),而是将其视为变量。但它没有在任何地方定义,因此你有那个错误。
像这样就可以了:
(data, nextCall) => {
我一个接一个地调用 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
);
});
};
错误: 引用错误:数据未定义
我不明白为什么会这样。
还有一些请告诉我通过优化实现上述内容的正确方法。
感谢任何帮助...
您似乎忘记在第二个箭头函数定义中关闭括号:
(data, nextCall => {
它仍然是一个有效的 JavaScript,但是解释器现在不再将 data
视为函数传入参数(如您需要),而是将其视为变量。但它没有在任何地方定义,因此你有那个错误。
像这样就可以了:
(data, nextCall) => {