解决承诺,然后未定义

时间:2019-07-29 13:40:05

标签: javascript reactjs promise

我认为在解决承诺时,代码仍然在说未定义的内容,它没有返回承诺,为什么?

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))
        })

    }
}

1 个答案:

答案 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不会返回承诺。