在承诺中回复承诺

时间:2017-02-17 14:27:06

标签: javascript es6-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中没有抛出的错误会在基础承诺链中被捕获,yay的值也不会被传递。

1 个答案:

答案 0 :(得分:2)

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

请注意,我在then函数中返回它。

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

    // getting undefined rather than yay

    .then(yay)...