Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 无法解析调用其他方法的承诺_Javascript_Promise_Resolve - Fatal编程技术网

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();

我不得不重构代码

  • 删除不必要的setTimeout
  • 加上一连串的承诺
  • (()=>{
    函数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确切地说,在某种程度上,这是一种教学方法;但没关系,我会尽快减少它