我认为在解决承诺时,代码仍然在说未定义的内容,它没有返回承诺,为什么?
export const SpacesPutImage = (folder, file, id, data, expertId, avatarUrl) => {
console.log(folder, file, id, data, expertId, avatarUrl)
if (avatarUrl === undefined) {
console.log('si')
return new Promise(function(resolve, reject) {
apiCall('put', `/api/experts/${expertId}/spaces`, {
data: data,
size: file.size,
id: id,
folder: folder,
fileType: file.type
})
.then((res) => resolve(res.Location))
.catch(err => reject(err))
})
} else {
console.log('no')
return new Promise(function(resolve, reject) {
apiCall('put', `/api/experts/${expertId}/spaces/${avatarUrl.split("/")[4]}`, {
data: data,
size: file.size,
id: expertId,
folder: folder,
fileType: file.type
}).then((res) => resolve(res.Location))
.catch(err => reject(err))
})
}
}
答案 0 :(得分:1)
首先,您不需要new Promise
,只需返回api调用,如果它使用.then
和.catch
,则意味着它已经是一个承诺。
export const SpacesPutImage = (folder, file, id, data, expertId, avatarUrl) => {
console.log(folder, file, id, data, expertId, avatarUrl)
if (avatarUrl === undefined) {
console.log('si')
return apiCall('put', `/api/experts/${expertId}/spaces`, {
data: data,
size: file.size,
id: id,
folder: folder,
fileType: file.type
}).then(res => res.Location)
} else {
console.log('no')
return apiCall('put', `/api/experts/${expertId}/spaces/${avatarUrl.split("/")[4]}`, {
data: data,
size: file.size,
id: expertId,
folder: folder,
fileType: file.type
}).then(res => res.Location)
}
}
也请在您的问题中加上apiCall
是什么,您怎么称呼SpacesPutImage
。
我认为无法兑现承诺的代码仍在说未定义
请提供正确的错误以及可能发生的位置。
正如评论中所述,可能会发生的一件事是apiCall
不会返回承诺,而saying then of undefined
可能是apiCall
不会返回承诺。