收藏
回答

如何发送同步网络请求?

我需要封装一个发送请求的方法,供别人使用,别人在调用我这个方法的地方,不能使用async 和 await 的方式,而是想直接获取返回值,如:

必须直接调用我提供的网络请求方法,获得返回值

//直接调用我提供的网络请求方法,获得返回值
var response = this.getPostData(url, data);

// 直接获取不到正确的数据
console.log(response);


我提供的网络请求方法是:

async getPostData(url, data) {

    var response;

    await this.http(url, data).then((res) => {

      console.log("then中" + res);

      response = res;

    });

    return response;

  },


  http(urlStr, dataStr) {

    return new Promise((resolve, reject) => {

      wx.request({

        url: urlStr,

        data: dataStr,

        method: "POST",

        success: res => {

          console.log("wx.request success");

          resolve(res)

        },

        fail: err => {

          console.log("wx.request fail");

          reject(err)

        }

      })

    })

  },


也就是说,直接调用的时候,执行顺序是

1、console.log(response);

2、发送请求

是否有办法发送同步网络请求?



回答关注问题邀请回答
收藏

1 个回答

  • 王明鼎
    王明鼎
    2022-06-28

    本根本上说async、await就是发起的异步请求,只不过可以让写法变成是同步的,其本质还是异步。

    所以微信小程序无法同浏览器上使用XMLHttpRequest发送同步请求

    let dataStr = UTF8ToString(data);
    let request = new XMLHttpRequest();
    request.open('POST', urlStr, false);
    request.setRequestHeader('content-type', 'application/json');
    request.send(dataStr);
    if (request.status === 200) {
        console.log(request.responseText);
    } else {
        console.log(request.status);
    }
    let responseText = request.responseText;
    
    2022-06-28
    有用
    回复
登录 后发表内容