繁体   English   中英

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

[英]execute an api and wait for the response code execution in javascript

在执行后续结果之前,我需要等待 api 响应返回。 所以我尝试在 js 中调用 promise 。 但它仍然没有等待 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);
    });
  };
}

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

我建议将awaitasync与 promise 一起使用。 由于await 仅在 async function 中有效,因此我必须将您的代码放入async function 中,我将其命名为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;
        }
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM