在不嵌套既在新promise中调用promise又调用resolve / reject的情况下获得期望结果的最简洁的方法是什么?



const transferFile = (fileName, bucketName)=>{
    const destinationBucket = gcs.bucket(bucketName);
    return exists =  destinationBucket.file(fileName).exists()
        .then(exists=>{
            if(exists[0]){
                return true;
            } else {

                // calling another method that returns a promise

                return file.move(destinationBucket)
                    .then(yay=>{

                        // return yay

                        return yay;
                    });

            }
        });

}

transferFile(image, 'bucketName')
    .then(exists=>{
        console.log(exists);
        transferFile(video, 'bucketName');
    })

    // getting undefined rather than yay

    .then(yay)...


我希望将yay值从file.move返回到基本承诺链。当前,从file.move引发的所有错误都不会在基本的Promise链中捕获,也不会传递yay的值。

最佳答案

transferFile返回承诺,但您在第二次调用中将其丢弃。

因此请注意,我在then函数中将其返回。

transferFile(image, 'bucketName')
    .then(exists=>{
        console.log(exists);
        return transferFile(video, 'bucketName');
    })

    // getting undefined rather than yay

    .then(yay)...

09-20 02:41