具有嵌套回调格式的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以避免回调地狱,所以可能是这样的事情...

const Q = require('q'); // you can do a research for this module.
var myModule = {};
myModule.functionOne = (params) => {
  const deferred = Q.defer(); // wait for this to complete
  // body function
  deferred.resolve(data); // this would be the result of this function
  return deferred.promise; // data is the output on your function
}

myModule.functionTwo = (params) => {
  const deferred = Q.defer(); // wait for this to complete
  // body function
  deferred.resolve(data); // this would be the result of this function
  return deferred.promise; // data is the output on your function
}

myModule.doAll = (params) => {
   myModule.functionOne(params)
   .then((outputFunctionOne) => {
      // this is called after functionOne ends
      return myModule.functionTwo(outputFunctionOne);
   })
   .then((outputFunctionTwo) => {
      // this is called after function 2 ends
      if (outputFunctionTwo.success) {
        // if everything ok, resolve the promise with the final output
        deferred.resolve(outputFunctionTwo);
      } else {
        // reject the promise with an error message
        deferred.reject('error');
      }
   })
   .fail((err) => { 
      // this is call if the promise is rejected or an exception is thrown
      console.log(err); // TODO: Error handling
   })
   .done();
}

module.exports = myModule;

您可以非常轻松地随意链接任意数量的Promise,这样就摆脱了回调地狱。最好的部分是,您可以在Javascript或Node.js上做出承诺

参考链接https://github.com/kriskowal/q

希望这可以帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在node.js中正确放置具有多个异步redis调用的回调

来自分类Dev

在node.js中正确放置具有多个异步redis调用的回调

来自分类Dev

Node.js for带有回调的循环,之后具有同步执行

来自分类Dev

Node.js回调:返回所有回调后,调用grand_callback

来自分类Dev

具有一个响应的多个回调-Node JS

来自分类Dev

使用MySQL的Node.js原型和嵌套回调

来自分类Dev

node.js在路由中表达嵌套回调

来自分类Dev

在击倒.js中嵌套带有afterRender回调的ForEach

来自分类Dev

在Node.js中,如何使用node-seq嵌套嵌套回调

来自分类Dev

将具有回调的约定的node.js函数转换为生成器并产生

来自分类Dev

sinon中具有异步回调的存根方法

来自分类Dev

最小起订量:无效的回调。具有参数的方法上的设置无法调用具有参数的回调

来自分类Dev

没有回调的Node.js函数

来自分类Dev

Node.js中的回调函数没有结果

来自分类Dev

Node.js-迭代运行带有回调的函数

来自分类Dev

在所有迭代完成之前调用了node.js async.each()回调

来自分类Dev

Node.js-错误回调的重新调用功能-是否有非阻塞方式?

来自分类Dev

调用具有默认参数的函数,该函数还具有回调

来自分类Dev

了解Node.js异步性-循环还是嵌套回调

来自分类Dev

“调用堆栈”用于node.js中的回调

来自分类Dev

在Node.js回调中调用模块函数

来自分类Dev

API调用的异步并行与node.js中的回调

来自分类Dev

“调用堆栈”用于node.js中的回调

来自分类Dev

JS-在回调函数内部调用类方法

来自分类Dev

验证两次连续的方法调用每次调用具有不同参数的模拟方法

来自分类Dev

没有为连续调度的文件调用AVAudioPlayerNode完成回调

来自分类Dev

父静态类中的PHP Usort在调用静态类中具有回调

来自分类Dev

iOS-具有成功和错误回调且没有初始参数的方法

来自分类Dev

从回调中调用对象的私有方法

Related 相关文章

  1. 1

    在node.js中正确放置具有多个异步redis调用的回调

  2. 2

    在node.js中正确放置具有多个异步redis调用的回调

  3. 3

    Node.js for带有回调的循环,之后具有同步执行

  4. 4

    Node.js回调:返回所有回调后,调用grand_callback

  5. 5

    具有一个响应的多个回调-Node JS

  6. 6

    使用MySQL的Node.js原型和嵌套回调

  7. 7

    node.js在路由中表达嵌套回调

  8. 8

    在击倒.js中嵌套带有afterRender回调的ForEach

  9. 9

    在Node.js中,如何使用node-seq嵌套嵌套回调

  10. 10

    将具有回调的约定的node.js函数转换为生成器并产生

  11. 11

    sinon中具有异步回调的存根方法

  12. 12

    最小起订量:无效的回调。具有参数的方法上的设置无法调用具有参数的回调

  13. 13

    没有回调的Node.js函数

  14. 14

    Node.js中的回调函数没有结果

  15. 15

    Node.js-迭代运行带有回调的函数

  16. 16

    在所有迭代完成之前调用了node.js async.each()回调

  17. 17

    Node.js-错误回调的重新调用功能-是否有非阻塞方式?

  18. 18

    调用具有默认参数的函数,该函数还具有回调

  19. 19

    了解Node.js异步性-循环还是嵌套回调

  20. 20

    “调用堆栈”用于node.js中的回调

  21. 21

    在Node.js回调中调用模块函数

  22. 22

    API调用的异步并行与node.js中的回调

  23. 23

    “调用堆栈”用于node.js中的回调

  24. 24

    JS-在回调函数内部调用类方法

  25. 25

    验证两次连续的方法调用每次调用具有不同参数的模拟方法

  26. 26

    没有为连续调度的文件调用AVAudioPlayerNode完成回调

  27. 27

    父静态类中的PHP Usort在调用静态类中具有回调

  28. 28

    iOS-具有成功和错误回调且没有初始参数的方法

  29. 29

    从回调中调用对象的私有方法

热门标签

归档