Javascript 无法解析调用其他方法的承诺
我无法解决已创建的承诺。不确定问题在哪里,请帮我解决这个问题Javascript 无法解析调用其他方法的承诺,javascript,promise,resolve,Javascript,Promise,Resolve,我无法解决已创建的承诺。不确定问题在哪里,请帮我解决这个问题 const tsearch = async () => { console.log("calling") //requesting the relevant page data await new Promise((resolve) => { getData("wifi", 2, true); return resolve(
const tsearch = async () => {
console.log("calling")
//requesting the relevant page data
await new Promise((resolve) => {
getData("wifi", 2, true);
return resolve("success")
});
console.log(finished);
}
function getData(url, callControl = 0, wifi = false) {
if (!!url) {
console.log(url + " - " + callControl)
}
if (callControl > 0)
setTimeout(getData, 1000, url, --callControl)
else {
console.log("getData - else part - resolving")
// Promise.resolve();
}
}
tsearch();
我不得不重构代码
(()=>{
函数getData(url、callControl、boo、response){
if(响应)console.log(响应)
返回新承诺(功能(解决、拒绝){
console.log(“调用”)
让res=`:url:“${(url)}”,callControl:“${(callControl)}”+boo:“${(boo)}”`
if(!url | | callControl{返回新的getData(“wifi”,2,true,result)})
.then(result=>{returnnewgetdata(null,2,true,result)})
.then(result=>console.log(result))
.catch(原因=>console.log(原因))
.finally(()=>console.log(“完成”))
})();
async
和await
旨在使您的程序更易于编写。令人惊讶的是,有多少人使用它使程序更复杂。在您的问题中有许多误解,在本文的其他答案中也有许多误解-
异步函数tsearch(){
console.log(“调用”)
const result=等待获取数据(“wifi”,2,真)
console.log(“完成的tsearch”)
返回结果
}
异步函数getData(url、callControl、wifi=false){
while(callControl>0){
log(`${url}-${callControl}`)
呼叫控制--
等待睡眠(1000)
}
返回“完成”
}
功能睡眠(ms){
返回新承诺(r=>setTimeout(r,ms))
}
tsearch().then(console.log,console.error)
您正在立即解析-getData中的超时不会阻止您调用resolve您必须将resolve传递给getData,以便getData可以在完成后调用它。将getData调用修改为getData(“wifi”,2,true,resolve);
和在getData()中添加了方法Promise.resolve(resolve)
似乎仍然不起作用,我是不是遗漏了什么。你的输入大大简化了代码,谢谢你的输入!为什么代码重复,为什么两次超时?我不明白你的重构是如何做与OP的代码相同的事情的。Bergi确切地说,在某种程度上,这是一种教学方法;但没关系,我会尽快减少它