带有条件语句的 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】:
假设 step2
和 step3
是返回 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);
如果
onFulfilled
或onRejected
返回值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 顺序异步的主要内容,如果未能解决你的问题,请参考以下文章