使用 JS 禁用对承诺失败的操作



我在禁用对承诺拒绝的操作时遇到问题

这是我的代码:

if (actions.length) {
const action = actions.shift();
action.rule(context).then(function () {
this.set('validAction', action);
this.set('disabledAction', null);
}.bind(this), testAction);
} else {
this.set('disabledAction', defaultIcon);
this.set('validAction', null);
}

最后一个 else 块应该在promise(action.rule(context))的"非条件"下执行 如何编码?

首先,如果你使用箭头函数,你不需要将this绑定到promise然后回调,其次你应该在catch中执行失败逻辑。

这是我怎么写的:

if (actions.length) {
const action = actions.shift();
action
.rule(context)
.then( () =>  {
this.set('validAction', action);
this.set('disabledAction', null);
})
.catch(error => {
this.set('disabledAction', defaultIcon);
this.set('validAction', null);
});
}

您也可以使用async/await,但考虑到代码示例,我认为这可能有点超出您的范围,如下所示:

async function verifyRule(actions) {
if (actions.length) {
const action = actions.shift();
const hasRule = await action.rule(context);
if(hasRule) {
this.set('validAction', action);
this.set('disabledAction', null);
} else {
this.set('disabledAction', defaultIcon);
this.set('validAction', null);
}
}
}

最新更新