- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我对如何使用 async.waterfall 方法清理我的回调感到困惑。我有几个函数进行 API 调用并通过回调从这些 API 调用返回结果。我想将一个 api 调用的结果传递给下一个。理想情况下,我还希望将这些调用包含在单独的函数中,而不是将它们直接粘贴到 async.waterfall 控制流中(为了便于阅读)。
我不太清楚你是否可以调用一个有回调的函数,它会在进入下一个函数之前等待回调,或者不。此外,当 API SDK 需要回调时,我是否将其命名为与 async.waterfall 中的回调名称匹配(在本例中称为“回调”)?
我可能会把很多东西混合在一起。希望有人能帮我解决这个问题。下面是我正在尝试做的部分代码片段......
async.waterfall([
function(callback){
executeApiCallOne();
callback(null, res);
},
function(resFromCallOne, callback){
executeApiCallTwo(resFromCallOne.id);
callback(null, res);
}],
function (err, res) {
if(err) {
console.log('There was an error: ' + err);
} else {
console.log('All calls finished successfully: ' + res);
}
}
);
//API call one
var executeApiCallOne = function () {
var params = {
"param1" : "some_data",
"param2": "some_data"
};
var apiClient = require('fakeApiLib');
return apiClient.Job.create(params, callback);
// normally I'd have some callback code in here
// and on success in that callback, it would
// call executeApiCallTwo
// but it's getting messy chaining these
};
//API call two
var executeApiCallTwo = function (id) {
var params = {
"param1" : "some_data",
"param2": "some_data",
"id": id
};
var apiClient = require('fakeApiLib');
// do I name the callback 'callback' to match
// in the async.waterfall function?
// or, how do I execute the callback on this call?
return apiClient.Job.list(params, callback);
};
最佳答案
如果您的一个 api 调用成功返回,您将使用 null
作为第一个参数调用本地回调。否则,调用它会出错,async.waterfall
将停止执行并运行最终回调。例如(没有测试id):
async.waterfall([
function(callback){
executeApiCallOne(callback);
},
function(resFromCallOne, callback){
executeApiCallTwo(resFromCallOne.id, callback);
}],
function (err, res) {
if(err) {
console.log('There was an error: ' + err);
} else {
// res should be "result of second call"
console.log('All calls finished successfully: ' + res);
}
}
);
//API call one
var executeApiCallOne = function (done) {
var params = {
"param1" : "some_data",
"param2": "some_data"
};
var apiClient = require('fakeApiLib');
return apiClient.Job.create(params, function () {
// if ok call done(null, "result of first call");
// otherwise call done("some error")
});
};
//API call two
var executeApiCallTwo = function (id, done) {
var params = {
"param1" : "some_data",
"param2": "some_data",
"id": id
};
var apiClient = require('fakeApiLib');
// do I name the callback 'callback' to match
// in the async.waterfall function?
// or, how do I execute the callback on this call?
return apiClient.Job.list(params, function () {
// if ok call done(null, "result of second call");
// otherwise call done("some error")
});
};
关于javascript - 关于 node.js 中 async.waterfall 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29308573/
我正在使用异步 waterfall ,我有一个关于 try/catch 错误的问题。 我不想用一个全局 try/catch 来回避这种语法方法,并且不能通过函数重复 try/catch : async
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想要改善这个问题吗?更新问题,以便将其作为on-topi
我正在阅读有关软件开发模型和生命周期的内容,在那里我了解了瀑布模型和统一流程。然而,这两个过程都涉及需求收集、设计阶段、开发测试和部署(统一过程中的初始、细化、构建和过渡阶段)。 任何人都可以帮助我解
假设我有一个具有异步方法的对象数组: [ { partOne: function(input) { // Do something async }, partT
我有一组必须按顺序执行的读取命令。任何失败,处理都会停止。 readCommands 是一个读取函数数组... async.waterfall(readCommands, function(err)
除了相对琐碎的功能之外,我倾向于害怕为任何东西编写 Javascript 的原因之一是我从来没有找到一种合适的方法来避免当一件事真正依赖于另一件事时的回调瀑布。有这样的方法吗? 我现在正在开发 Tit
这个问题在这里已经有了答案: How to structure nested Promises (3 个答案) 关闭 6 年前。 我是一名 API 开发人员,通常编写需要将结果从一个异步调用传递到另
我尝试使用 async.waterfall 来清理我的代码。我有两个问题,这是我的代码。 async.forEachOf(req.files, (value, key, callback) => {
这个问题已经有答案了: For-loop and async callback in node.js? (3 个回答) 已关闭 9 年前。 我有以下异步代码。 for fileName in so
我正在使用npm异步 waterfall 方法来编写功能。在那里我发现了一个奇怪的情况(可能是我的意识低)。我的功能如下。我在第一个函数中创建一个事件数组,并通过回调参数将其传递给第二个函数。然后我在
我正在尝试实现一个架构,其中客户拥有订单和发货历史记录。我正在尝试使用 API 调用将该数据导入到另一个系统,但问题是我无法使用单个 API 调用导入所有客户数据。我正在使用 Promise 创建 w
从下面的代码中我没有得到 result1 数据。这是未定义的。有人可以帮助我吗? async.waterfall([ function(callback) { request(
我第一次使用async.waterfall,但遇到了一些麻烦。 这是我尝试调用的两个函数: function generateImageURL(data, callback){ // ... x
如何创建像 Chrome Inspector、GTMetrix 这样的网站 waterfall/时间线? 我需要在网站打开时获取数据。加载整个网站时浏览器发出了多少请求。请求发生的地点等。 是否有任何
有两个调用的 waterfall 函数,但第二个调用没有等待第一个完全完成。第一个有一个 mongodb.find() 调用。这是异步 waterfall 函数 app.get("/news", fu
我正在尝试执行 waterfall 式异步,但没有得到我想要的预期输出。如果我使用数组而不是查询,基本上我的 waterfall 会按预期工作所以我想我在查询的回调中做错了什么,但我不知道是什么。 当
我正在尝试将数据返回到我的 View 模板。我正在使用 async.waterfall 来执行此操作。只有一个问题,类的结果总是undefined Controller : Profile().the
我正在使用 node.js 和异步包。 这是我的代码: async.waterfall( [ function(callback) { var data = getSomeDa
我正在实现一个用 Node.js 编写的项目,并从 Mysql 获取值。随着我在项目中的深入,我的嵌套回调是这样的 hold.getEntry(function(data){ var ref
我需要保存到异步 waterfall 系列内的数据库。 我尝试在 clean 函数之后集成这两个函数 function connectDb(next) {
我是一名优秀的程序员,十分优秀!