执行api并等待javascript中的响应代码执行

执行api并等待javascript中的响应代码执行,javascript,promise,Javascript,Promise,在执行后续结果之前,我需要等待api响应返回。所以我尝试了js中的承诺调用。但它仍然没有等待api响应。我的尝试如下 getAgentList(data); //here data object receiving data console.log("executed before the api response"); var getAgentList = function (dataFromMsg) { const myPromise = new Promis

在执行后续结果之前,我需要等待api响应返回。所以我尝试了js中的承诺调用。但它仍然没有等待api响应。我的尝试如下

 getAgentList(data); //here data object receiving data
 console.log("executed before the api response");
  var getAgentList = function (dataFromMsg) {
  const myPromise = new Promise(function (resolve, reject) {
    
    let accountNum = window.localStorage.account;
    fetch("/web/main?account=" + accountNum, {
      method: "GET",
    })
      .then(function (res) {
        return res.json();
      })
      .then(function (data) {
        let friendArrList = data.data.friend[0].list;
        
        for (let i = 0; i < friendArrList.length; i++) {
          if (friendArrList[i].id == dataFromMsg.id) {
            dataFromMsg.avatar = friendArrList[i].avatar;
            dataFromMsg.username = friendArrList[i].username;
            break;
          }
        }
        dataFromMsgG = JSON.parse(JSON.stringify(dataFromMsg)); //dataFromMsgG is global object
     
        resolve("fine");
      })
      .catch((error) => {
        console.error("Error:", error);
        reject("error");
      });

   
  });

  myPromise
    .then(function whenOk(response) {
      console.log("response", response);
      return response;
    })
    .catch(function notOk(err) {
      console.error(err);
    });
  };
}
getAgentList(数据)//这里是接收数据的数据对象
log(“在api响应之前执行”);
var getAgentList=函数(dataFromMsg){
const myPromise=新承诺(函数(解析、拒绝){
让accountNum=window.localStorage.account;
fetch(“/web/main”account=“+accountNum{
方法:“获取”,
})
.然后(功能(res){
返回res.json();
})
.then(功能(数据){
让friendArrList=data.data.friend[0].list;
for(设i=0;i{
控制台错误(“错误:”,错误);
拒绝(“错误”);
});
});
我的承诺
.然后(功能whenOk(响应){
控制台日志(“响应”,响应);
返回响应;
})
.catch(函数notOk(错误){
控制台错误(err);
});
};
}

但它将打印“在api响应之前执行”行,而不等待api响应。那么我哪里出错了,怎么能等到api响应成功呢?

我建议使用
wait
async
,并承诺使用。 由于等待仅在异步函数中有效,因此我必须将代码放入
async
函数中,我将其命名为main

<script>
    main();

    async function main() {
        
        await getAgentList();
        console.log("executed before the api response");
        
        function getAgentList() {
            const myPromise = new Promise(function (resolve, reject) {
                ///...
                ///... Your code
                ///...
            });

            myPromise
              .then(function whenOk(response) {
                  console.log("response", response);
                  return response;
              })
              .catch(function notOk(err) {
                  console.error(err);
              });
           
            return myPromise;
        }
    }

main();
异步函数main(){
等待getAgentList();
log(“在api响应之前执行”);
函数getAgentList(){
const myPromise=新承诺(函数(解析、拒绝){
///...
///…您的代码
///...
});
我的承诺
.然后(功能whenOk(响应){
控制台日志(“响应”,响应);
返回响应;
})
.catch(函数notOk(错误){
控制台错误(err);
});
回报我的承诺;
}
}

什么东西没有等待什么?如果它没有等待
getAgentList()
,那么我们需要查看该代码。否则,
console.log(“在api响应之前执行”)
在其他所有代码之前显示,因此,当然,它在任何其他代码执行之前显示。
console.log(“在api响应之前执行”)
没有等待api代码执行,api代码是什么?我们不知道你的密码。请具体说明并参考特定的代码行,而不是对我们没有意义的一般术语。承诺不会按照您在描述中期望的方式起作用。仅仅因为函数中有一个承诺,并不意味着其他一切都停止并等待该函数完成。异步环境的性质意味着以下代码(您的控制台日志)将立即执行,因为我们不知道该函数需要多长时间才能完成。为了执行第1步和第2步,第1步必须返回一个承诺,第2步必须在
.then()
回调句柄中。在代码中,它看起来是这样的:
getAgentList(data)。然后(()=>{console.log(“在api响应之前执行”)}
-假设
getAgentList()
返回一个承诺对象。