多层的Promise return
2021-04-14
1 min read
遇到很多层的方法调用,又是.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("");
}
});
},