多层的Promise return

遇到很多层的方法调用,又是.then又是callback,如果想把最底层的结果Promise.resolve上去,笨办法是每层方法和callback都要return一下,太繁琐。那么可以在最上层建个new Promise,然后在最底层的时候resolve

// 简洁的写法
getContractFileUrl () {
    return new Promise((resolve) => {
        contractService.queryContract(form).then((contractInfo) => {
            if (contractInfo.results.length > 0) {
                productDetailService.getFileUrl(contractInfo.results[0], (url) => {
                    resolve(url);
                })
            } else {
                resolve("");
            }
        });
    })
},
// 丑陋的写法
getContractFileUrl () {
    return contractService.queryContract(form).then((contractInfo) => {
        if (contractInfo.results.length > 0) {
            //getFileUrl得return callback给fileService.previewFile也得return
            //previewFile得return callback给$.http.get("account/download/getFileToken")
            //$.http.get("account/download/getFileToken")得return
            return productDetailService.getFileUrl(contractInfo.results[0], (url) => {
                return Promise.resolve(url);
            })
        } else {
            return Promise.resolve("");
        }
    });
},