Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带条件语句的NodeJS顺序异步_Javascript_Node.js_Asynchronous_Promise_Q - Fatal编程技术网

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

Javascript 带条件语句的NodeJS顺序异步,javascript,node.js,asynchronous,promise,q,Javascript,Node.js,Asynchronous,Promise,Q,是否可以编写以顺序方式执行多个异步步骤的NodeJS代码,其中一些步骤根据条件语句执行或绕过 让我试着用伪代码编写一个示例 想象一下你有 step1.然后(step2).然后(step3) 现在,让我们添加一个选项: var opt=true 如何实现以下目标: step1。然后(opt&&step2)。然后(step3) 或者,如果我们在中间有两个不同的可能步骤: step1.然后(opt?step2:step3).然后(step4) 编辑 如果可选步骤是在开头 (选择和步骤1)。然后(步骤2

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

让我试着用伪代码编写一个示例

想象一下你有

step1.然后(step2).然后(step3)

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

var opt=true

如何实现以下目标:

step1。然后(opt&&step2)。然后(step3)

或者,如果我们在中间有两个不同的可能步骤:

step1.然后(opt?step2:step3).然后(step4)

编辑

如果可选步骤是在开头

(选择和步骤1)。然后(步骤2)。然后(步骤3)

如果有人能透露一些信息或提出一些建议,那就太棒了


谢谢

假设
step2
step3
是返回承诺的函数,那么问题是什么:

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

您的第一个示例
step1。然后(opt&&step2)。然后(step3)将如下所示:

step1.then(function() {
     if( opt ) {
         return step2();
     }
 })
 .then(step3);
如果没有返回任何内容,则返回
未定义的
。对于每个不是承诺的返回值,库将创建一个用该值解析的承诺

:

promise2=promise1。然后(一旦履行,一旦拒绝)

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


正如我将要写的,这是正确的方法。这似乎正确地处理了我问题中的第二个例子。但是你会如何管理第一个呢<代码>步骤1。然后(选择和步骤2)。然后(步骤3)
如果我理解正确,当
var opt=false
时,此案例不会返回承诺。有什么想法吗?谢谢!这是我遗漏的一点信息:)我不知道如果返回值不是承诺值,库会自动生成承诺。最后一个问题:如果一开始就有“可选步骤”,会发生什么?在伪代码
(opt&&step1)。然后(step2)。然后(step3)
@Pensierinmusica:然后使用
Q(opt&&step1())。然后(…)
可能重复:(现在不关闭,因为你已经得到了答案)当你想要计算
opt
时,Dpends打开。如果它是静态已知的,您的三元运算符将已经工作,
opt&&
可以写成
(opt?step1.then(step2):step1.then(step3)
step1.then(opt?step2:function id(x){return x;})。然后(step3)