gpt4 book ai didi

javascript - JS Promises - 当只有单个路径是异步时的 if-else 流程

转载 作者:行者123 更新时间:2023-11-28 19:06:28 26 4
gpt4 key购买 nike

我正在重写一些遗留代码,这些代码是使用同步ajax构建的(太糟糕了)。现在我正在使用 Promises(特别是 Bluebird)。有很多情况,函数有很多路径,其中只有一个是异步的。

问题是我必须识别所有路径并手动从每个路径返回新的 promise 。像这样:

function syncFn() {
// sync code return
}
function asyncFn() {
// some async code here that return Promise
}
function myMegaFunction() {
if ( ... ) {
return Promise.resolve(syncFn());
}
else if ( ... ) {
if ( ... ) {
return Promise.resolve(syncFn());
}
else if ( ... ) {
return Promise.resolve(syncFn());
}
else {
return asyncFn(); // only async function here
}
}
else {
return Promise.resolve();
}
}

有什么方法或模式可以简化这个过程吗?也许类似 - 如果返回未定义,则包装为空 promise ?

最佳答案

更简单

function myMegaFunction() {
if ( ... ) {
syncFn();
}
else if ( ... ) {
if ( ... ) {
syncFn();
}
else if ( ... ) {
syncFn();
}
else {
return asyncFn(); // only async function here
}
}
return Promise.resolve();
}

不是很多......但更简单

当您在需要完成的地方返回 asyncFn 时,您可以简单地放置一个 return Promise.resolve() ...实际上...让我编辑它,我刚刚注意到一些...

function myMegaFunction() {
if ( ... ) { //A
;
}
else if ( ... ) { //B
if ( ... ) { //C
;
}
else if ( ... ) { // D
;
}
else {
return asyncFn(); // only async function here
}
}
synchFn();
return Promise.resolve();
}

可以写成

function myMegaFunction() {
if(!A && B && !C && !D) {
return asyncFn();
}
synchFn();
return Promise.resolve();
}

编辑::不完全是——但很接近——synchFn 是个婊子

function myMegaFunction() {
if(!A && B && !C && !D) {
return asyncFn();
}
if(A || B) {
synchFn();
}
return Promise.resolve();
}

关于javascript - JS Promises - 当只有单个路径是异步时的 if-else 流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31559165/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com