如果变量未定义,请跳过承诺之一

时间:2017-08-08 06:28:10

标签: javascript node.js lodash es6-promise ramda.js

我有一种情况,我想处理多个承诺。

假设我有3个变量

fileOption, setupOptions, moveOption

基于我请求函数的每个变量,如

file.validate(token)
    .then((token) => file.create(fileOption))
    .then((file) => setup ? file.getToken(userfromSetup) : Promise.resolve({}))
    .then((token) => setup ? file.setup(setupOptions) : Promise.resolve({}))
    .then((data) => moveOption ? file.getTokenForMove(userFromMove) : Promise.resolve({}))
    .then((token) => moveOption ? file.move(moveOption) : Promise.resolve({}))
    .then((success)=>logger.log(`file created successfully`))
    .catch((err)=>logger.error(`Error`))

如果 setupOption 未定义,那么我不想为其获取令牌并为文件创建设置,并为 moveOption 创建相同的设置。为了创建设置,我需要先创建令牌,然后再移动

所以我关注的是如果以上变量未定义

,如何跳过承诺和不必要的空承诺返回

1 个答案:

答案 0 :(得分:0)

 var file_promise = file.validate(token)
.then((token) => file.create(fileOption))
.then((file) => setup ? file.getToken(userfromSetup) : Promise.resolve({}))
.then((token) => setup ? file.setup(setupOptions) : Promise.resolve({}));
if(moveOption){
    file_promise.then((data)=>{file.getTokenForMove(userFromMove)});
}
file_promise.then((token) => moveOption ? file.move(moveOption) : Promise.resolve({}))
.then((success)=>logger.log(`file created successfully`))
.catch((err)=>logger.error(`Error`));

您可以简单地使用变量和常规条件语句来链接或不链接承诺。

可能由此产生的问题是每个步骤都不能确定它将接收到什么,但是你的代码为then()中调用的函数创建了参数,但它们不使用它们,所以它不应该导致任何麻烦。否则,你的确会像你一样,并使用默认值或其他东西来解决。