带有条件语句的 NodeJS 顺序异步

Posted

技术标签:

【中文标题】带有条件语句的 NodeJS 顺序异步【英文标题】:NodeJS sequential async with conditional statements 【发布时间】: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);

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

谢谢

【问题讨论】:

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

以上是关于带有条件语句的 NodeJS 顺序异步的主要内容,如果未能解决你的问题,请参考以下文章

for 语句执行顺序

04.选择与循环

javascript语句

Oracle SQL 语句中的条件顺序是不是重要?

Python 的条件语句和循环语句

带有单管道“|”的 Javascript 条件语句