所有的诺言都是平等的吗?

时间:2018-10-29 15:19:22

标签: javascript angular promise

考虑以下代码:

var someFunc = function() {
  return new Promise((resolve, reject) => {
      setTimeout(() => {
          resolve(37);
      }, 1000);
  });
};

var f1 = function() {
  return someFunc()
    .then(val => {
      return val + 1;
    });  
}

var f2 = function() {
  return new Promise(resolve => {
    someFunc()
    .then(val => {
      resolve(val + 1);
    });    
  });
}

var f3 = function() {
  someFunc().then(val => {
      return new Promise(resolve => {
          resolve(val + 1);
      });    
  });              
};
如果在f1的Angular 6中更新了绑定变量的值,

then更改检测将无法启动。

因此,如果以下是点击处理程序:

这不起作用:(UI无法更新)

public myClickHandler() {
   f1().then(val => this.uiBoundVar = val);
}

这有效:(UI已更新)

public myClickHandler() {
   f2().then(val => this.uiBoundVar = val);
   // This works too
   // f3().then(val => this.uiBoundVar = val);
}

不确定是否是由于From MDN Promise return value

  

处于待处理状态的承诺。然后,异步调用处理程序函数(onFulfilled或onRejected)(一旦堆栈为空)。调用处理程序函数后,如果处理程序函数为:

     

返回一个值,然后返回的promise将返回的值作为其值进行解析;

0 个答案:

没有答案