Javascript 如何恰当地构造带条件和延迟的获取承诺链?
如何合理地构造有条件、有延迟的取回承诺链?我有Javascript 如何恰当地构造带条件和延迟的获取承诺链?,javascript,promise,fetch,Javascript,Promise,Fetch,如何合理地构造有条件、有延迟的取回承诺链?我有 fetch("/myApi") .then(response => response.json()) .then(json => { if (data.foo != "bar") return fetch("/setFoo=bar").then(() => delay(100).then(() => { if (data.
fetch("/myApi")
.then(response => response.json())
.then(json => {
if (data.foo != "bar")
return fetch("/setFoo=bar").then(() => delay(100).then(() => {
if (data.magic != "exist")
return fetch("/setMagic=exist")
}))
if (data.magic != "exist")
return fetch("/setMagic=exist")
})
.then(() => console.log("Great success !"))
function delay(ms) { return new Promise((resolve, reject) => setTimeout(resolve, ms))}
此代码应发出API请求,检查foo值是否等于bar,如果不是,则设置foo=bar
,然后等待100ms,如果未设置,则设置值magic=exist
但如果foo
已经是bar
,则应立即将magic
设置为exist
在我的例子中,我复制了magic=exist
检查并设置,结果看起来完全错误。以下是您想要的:
fetch(“/myApi”)
.then(response=>response.json())
。然后(异步json=>{
如果(data.foo!=“bar”){
等待提取(“/setFoo=bar”);
等待延迟(100);
}
如果(data.magic!=“存在”)
返回fetch(“/setMagic=exist”)
})
。然后(()=>console.log(“非常成功!”)
函数延迟(ms){returnnewpromise((resolve,reject)=>setTimeout(resolve,ms))}
您可以这样编写它
fetch(“/myApi”)
.then(response=>response.json())
.然后(设置ifnotbar)
.然后(setIfMagicNotExist)
。然后(()=>console.log(“非常成功!”)
函数延迟(ms){returnnewpromise(resolve=>setTimeout(resolve,ms))}
函数setIfNotBar(data){data.foo!=“bar”?fetch(“/setFoo=bar”)。然后(delay(100))。然后(()=>data):data}
函数setIfMagicNotExist(data){data.magic!=“exist”?fetch(“/setMagic=exist”):data}
它似乎符合您的要求。如果您没有提供完整的跑步示例,那么很难找到您真正想要的。