理解promises链接:'then()'得到未定义的参数作为结果

时间:2016-09-12 11:19:27

标签: javascript angularjs promise

我开始深入研究承诺,并需要您的帮助才能理解为什么此代码无法正常工作。

这就是我需要的:

成功检索代码后,代码应该注销('成功获取Profile!'),并返回true作为结果,应该传递给下一个then()元素。但是,true代替undefined,结果为 public verifyAuth(): angular.IPromise<boolean> { let promise: ng.IPromise<boolean> = this._Token.getIdToken() .then((idToken) => { if (!idToken) { return false; } else if (this._Profile.isEmpty()) { promise = this.retrieveProfileInfo() .then(() => { this._$log.log('success getting Profile!'); return true; }); } else { return true; } }) .catch((error) => { this._Token.clearToken(); this._$log.error(error); return false; }); return promise; }

public IEnumerable<ItemTable> SearchItem(string itemName)
{
    return (from i in 
            _connection.Table<ItemTable>() 
            where i.ItemName.StartsWith(itemName) 
            select i).ToArray();      
}

enter image description here

1 个答案:

答案 0 :(得分:2)

您将在稍后的成功promise块中重新分配之前返回第一个then对象。你不需要像这样使用链接:

public verifyAuth(): angular.IPromise<boolean> {
  let promise: ng.IPromise<boolean> = this._Token.getIdToken()
    .then((idToken) => {
      if (!idToken) {
        return false;
      }
      else if (this._Profile.isEmpty()) {
        return this.retrieveProfileInfo()
          .then(() => {
            this._$log.log('success getting Profile!');
            return true;
          });
      } else {
        return true;
      }
    })
    .catch((error) => {
      this._Token.clearToken();
      this._$log.error(error);
      return false;
    });

  return promise;
}

注意,您只是return this.retrieveProfileInfo()如何自动成为新promise