我有一种情况,我想处理多个承诺。
假设我有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 创建相同的设置。为了创建设置,我需要先创建令牌,然后再移动
所以我关注的是如果以上变量未定义
,如何跳过承诺和不必要的空承诺返回答案 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()中调用的函数创建了参数,但它们不使用它们,所以它不应该导致任何麻烦。否则,你的确会像你一样,并使用默认值或其他东西来解决。