Promise如何在此代码中工作?

时间:2018-05-23 06:33:44

标签: javascript promise

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

  • getRemoteProfile仅针对一个条件返回Promise.resolve,但getRemoteProfile次调用始终与then相关联,那么当该条件失败时会发生什么?
  • return promisereturn 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); } }); } 然后

    $this->email->attach($atch);

2 个答案:

答案 0 :(得分:2)

无法在没有.then属性的对象上调用

.then。因此,如果getRemoteProfile返回的内容不是Promise,则会(几乎总是)抛出错误。

但是,在这种情况下,如果您没有理由怀疑代码被破坏,我非常怀疑getGroupInfogetUserInfo构建并返回Promises本身。 getRemoteProfile不必为他们创建一个。

通常,在需要Promise的情况下使用Promise.resolve,但当前情况并不需要实际的异步操作(例如网络请求)。

答案 1 :(得分:1)

  

getRemoteProfile仅针对一个条件返回promise.resolve,但是使用then调用getRemoteProfile,因此当不进入条件时会发生什么

据推测,getGroupInfogetUserInfo也会返回promises,而getRemoteProfile函数将始终进入其中一个返回值的条件分支。所有promises都有一个.then方法,只要函数总是返回一个promise,那就应该有效。

  

返回promise和return prommise.resolve之间的区别是什么,我认为返回promise.resolve总是属于那个

Promise.resolve会创建一个承诺,因此如果您返回Promise.resolve(...),那么您are会返回承诺。