【问题标题】:NodeJS sequential async with conditional statements带有条件语句的 NodeJS 顺序异步
【发布时间】:2015-02-15 05:07:32
【问题描述】:

是否可以编写以顺序方式执行多个异步步骤的 NodeJS 代码,其中某些步骤会根据条件语句被执行或绕过?

让我试着用伪代码写一个例子。

想象一下你有类似的东西

step1.then(step2).then(step3);

现在让我们添加一个选项:

var opt = true;

如何实现类似的目标:

step1.then(opt && step2).then(step3);

或者,如果我们假设中间有 2 个不同的可能步骤:

step1.then(opt ? step2 : step3).then(step4);

编辑

如果可选步骤位于开头?

(opt && step1).then(step2).then(step3);

如果有人能提供一些启示或提出建议,那就太棒了!

谢谢

【问题讨论】:

  • 可能重复:stackoverflow.com/questions/22594978/…(现在不会关闭,因为您已经得到了答案)
  • 取决于您希望何时评估 opt。如果它是静态已知的,那么您的三元运算符已经可以工作,并且 opt && 可以写成 (opt ? step1.then(step2) : step1).then(step3)step1.then(opt ? step2 : function id(x){ return x; }).then(step3)

标签: javascript node.js asynchronous promise q


【解决方案1】:

假设 step2step3 是返回 promise 的函数有什么问题:

 step1.then(function() {
     if( opt ) {
         return step2();
     } else {
         return step3();
     }
 })
 .then(step4);

编辑

您的第一个示例 step1.then(opt && step2).then(step3); 如下所示:

step1.then(function() {
     if( opt ) {
         return step2();
     }
 })
 .then(step3);

如果您不返回任何内容,则返回 undefined。对于每个不是 Promise 的返回值,库将创建一个使用该值解析的 Promise。

Promises/A+: The then Method:

promise2 = promise1.then(onFulfilled, onRejected);

如果onFulfilledonRejected 返回值x,则运行承诺解决过程[[Resolve]](promise2, x)

【讨论】:

  • 正要写的,这才是正确的做法。
  • 这似乎可以正确处理我的问题中的第二个示例。你将如何管理第一个? step1.then(opt && step2).then(step3); 如果我理解正确,这种情况在var opt = false 时不会返回承诺。有什么想法吗?
  • 谢谢!这就是我缺少的一些信息:) 我不知道库会自动生成一个承诺,以防返回的值不是一个。
  • 最后一个问题:如果您在一开始就有“可选步骤”会发生什么?在伪代码(opt && step1).then(step2).then(step3);
  • @Pensierinmusica:那就用Q(opt && step1()).then(…)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 1970-01-01
  • 2013-10-23
  • 2021-06-19
相关资源
最近更新 更多