我在禁用对承诺拒绝的操作方面遇到了问题
这是我的代码:
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))
的“ not condition”上执行
怎么编码?
答案 0 :(得分:0)
首先,如果使用箭头函数,则不需要将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);
}
}
}