代码之家  ›  专栏  ›  技术社区  ›  Rasim Avcı

在这个代码中,承诺是如何工作的?

  •  2
  • Rasim Avcı  · 技术社区  · 6 年前

    我对以下代码有几个问题:

    • getRemoteProfile 退货 Promise.resolve 只有一个条件,但是 获取远程配置文件 呼叫总是用 then ,那么当条件失效时会发生什么?
    • 有什么区别吗 return promise return promise.resolve ,我想 return promise.resolve 总是陷入 然后

      function getRemoteProfile(id) {
          if (!id && /^_/.test(id)) {
              return Promise.resolve(null);
          }
          var isGroup = app.isGroupId(id);
          if (isGroup) {
              return getGroupInfo(id);
          } else {
              return getUserInfo(id.split('@')[0], app.currentUserDomain);
          }
      }
      
      function reloadProfile(id, keep) {
          return getRemoteProfile(id).then(function(contactProfile) {
              // var isGroup = app.isGroupId(id);
              if (contactProfile) {
                  contactProfile.contact_id = id;
                  if (!keep) {
                      delete profilePromises[id];
                  }
                  contactProfile.member = true;
                  updateProfile(contactProfile.contact_id, contactProfile).then(function() {
                      app.imagesStorage.setContactIcon(contactProfile.contact_id);
                  });
      
                  return setDetails(contactProfile);
              }
          });
      }
      
    2 回复  |  直到 6 年前
        1
  •  2
  •   CertainPerformance    6 年前

    .then 无法对不具有 然后 属性。所以,如果 getRemoteProfile 任何时候都不会返回 Promise ,将(几乎总是)引发一个错误。

    但是,在本例中,如果您没有理由怀疑代码被破坏,那么我非常怀疑这两者都是 getGroupInfo getUserInfo 构建并返回承诺本身。 获取远程配置文件 不需要为他们创建一个。

    一般来说,你使用 Promise.resolve 在需要承诺的情况下,但当前情况不需要实际的异步操作(如网络请求)。

        2
  •  1
  •   JLRishe    6 年前

    GetRemoteProfile只返回Promise.Resolve一个条件,但用Then调用了GetRemoteProfile,所以当不符合条件时会发生什么

    大概吧 getGroupInfo getUserInfo 也要回报承诺和 getRemoteProfile 函数将始终进入这些返回值的条件分支之一。所有承诺都有 .then 方法只要函数总是返回一个承诺,就应该有效。

    退货承诺和退货承诺的区别是什么?解决,我认为退货承诺。解决总是属于那个时候。

    Promise.resolve 创造了一个承诺,所以如果你回来 Promise.resolve(...) 那么你呢 are 归还承诺。