【问题标题】:node.js wait for callback to finish?node.js 等待回调完成?
【发布时间】:2016-02-17 04:20:43
【问题描述】:

我有以下代码:

            exported.removeWatcher(issueId, user, function(err, result) {
                if (result.statusCode != 204) { // Build a list of failed issues

                } else if (result.statusCode == 204) {

                }
                console.log();
            });

我知道使用回调是 node.js 的优势之一,但对于我的用例,我想等到收到来自上述回调的响应(即除非触发回调,否则不要进一步执行代码.) 我怎样才能做到这一点?

【问题讨论】:

  • 是否可以从回调本身进一步执行代码?
  • 你可以使用承诺;)
  • 试图阻塞当前线程直到满足某个条件,这违背了nodejs的核心设计。即使您设法做到这一点,这也是不可取的,并且有可能引入已完成的 sis 问题。
  • 你不能。构建您的代码以异步工作。
  • 感谢 cmets 的各位。我能够按照 GoodDamon 的建议做到这一点,但我仍然需要考虑使这项工作异步工作的替代方法。感谢所有的建议。

标签: javascript node.js asynchronous callback


【解决方案1】:

您可以使用async.js。只需使用 npm 安装它并在您的代码中“要求”它。

例如:

async.series([ 
  function(callback) {
    myWaitForThisFunction(callback);
  },
  function(callback) {
    myThenDoThisFunction(callback);
  }
]);

【讨论】:

  • 感谢您的建议,在阅读 async.series 文档时,它说如果任何函数遇到错误,则不会调用其余函数并调用主回调。对于我的用例,即使其中一个函数出错,我仍然想处理所有函数。关于如何使用 async 完成此操作的任何想法?
  • 它表示如果任何函数返回错误,则不会遇到错误。如果您使用 try 和 catch 块处理错误,则在您的 catch 块中,您可以使用其他值调用回调函数。例如:try{ do_something();回调(结果); } catch(error) { console.log(error);callback(myNonErrorVariable); }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 2020-07-12
  • 1970-01-01
  • 1970-01-01
  • 2013-09-26
  • 1970-01-01
  • 2014-12-22
相关资源
最近更新 更多