使用JS禁用对Promise失败的操作

时间:2018-10-08 06:44:26

标签: javascript jquery

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

这是我的代码:

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”上执行 怎么编码?

1 个答案:

答案 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);
    }
  }
}