具有嵌套回调格式的 Node.js 连续方法调用

标签 node.js

所以我是 Node.js 的新手,我只是想知道我的代码设置方式是否有意义。我来自 Java 背景,因此嵌套回调结构是新的。我有一个运行一堆代码的 Node 程序,我将这些代码分解为不同的方法。问题是这些方法需要按顺序调用。我的代码现在具有以下结构:

functionOne(data, callback(err) {

   functionTwo(data, callback(err) {

      functionThree(data, callback(err) {

          functionFour(data, callback(err) {
             //Code
          });

      });

   });

});

这个很简约,但是这个结构可以吗?使用 Java,我会获取所有方法的返回值,然后将它们传递给下一个函数。根据我目前的理解,我刚才提到的 Java 方法是 Node.js 试图消除的主要内容之一。但不管怎样……那个结构看起来好吗,它的设计是这样的吗?只是想确保我没有在 Node 上犯任何一般性的重大错误。谢谢!

最佳答案

如果您使用回调模式,您的代码结构看起来不错。 但是如果你有兴趣让你的代码更清晰和可读,你想在你的异步函数中使用 Promises,所以你可以做这样的事情而不是传递一个回调给你的函数:

function asyncFunction (data){
   return new Promise(function(resolve, reject){
       // Do something with data
       // Here you can call reject(error) to throw an error
       resolve();
   });
}

您可以调用 Promise 的 then 方法,而不是嵌套函数回调。

asyncFunction(data)
.then(function(){
    // Promise resolved
    // Something has been done with data
});

通过 Promises,您还可以并行执行异步函数:

Promise.all([asyncFunctionA(data), asyncFunctionB(data), asyncFunctionC(data)])
.then(function(){...});

编辑

如果您需要将一个函数的值传递给另一个函数,您的代码应如下所示:

asyncFunctionA(data)
.then(function(dataA){
    return asyncFunctionB(dataA);
})
.then(function(dataB){
    return asyncFunctionC(dataB);
})
.then(function(dataC){
// ...
});

关于具有嵌套回调格式的 Node.js 连续方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37312070/

相关文章:

node.js - 我们可以使用 Electron 的 Node API package/修改 Cordova FS API 以使其在桌面环境下工作吗?

node.js - NodeJS - 如何解决本地模块上的 “Cannot find module” 错误?

node.js - Express.js REST API 无法在 Heroku 上运行

javascript - 避免回调 hell 失去变量范围

javascript - Promise 返回 undefined

node.js - 如何在另一个生成器函数中访问 koa 上下文?

javascript - 如何从客户端 javascript 调用特定的 node.js 方法

node.js - 使用 node.js 中的 express,客户端 cookie 未正确存储在 redis 存储中

javascript - Node 架构的正确格式 (BASIC)

mysql - 如何在 Sequelize 模型中定义索引?