我对以下代码有几个问题:
getRemoteProfile
仅针对一个条件返回Promise.resolve
,但getRemoteProfile
次调用始终与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);
}
});
}
然后
$this->email->attach($atch);
答案 0 :(得分:2)
.then
属性的对象上调用 .then
。因此,如果getRemoteProfile
返回的内容不是Promise
,则会(几乎总是)抛出错误。
但是,在这种情况下,如果您没有理由怀疑代码被破坏,我非常怀疑getGroupInfo
和getUserInfo
构建并返回Promises本身。 getRemoteProfile
不必为他们创建一个。
通常,在需要Promise的情况下使用Promise.resolve
,但当前情况并不需要实际的异步操作(例如网络请求)。
答案 1 :(得分:1)
getRemoteProfile仅针对一个条件返回promise.resolve,但是使用then调用getRemoteProfile,因此当不进入条件时会发生什么
据推测,getGroupInfo
和getUserInfo
也会返回promises,而getRemoteProfile
函数将始终进入其中一个返回值的条件分支。所有promises都有一个.then
方法,只要函数总是返回一个promise,那就应该有效。
返回promise和return prommise.resolve之间的区别是什么,我认为返回promise.resolve总是属于那个
Promise.resolve
会创建一个承诺,因此如果您返回Promise.resolve(...)
,那么您are
会返回承诺。