首页 > 解决方案 > 从 unity 和 Web 浏览器之间的异步调用返回数据

问题描述

我正在开发一个项目,我们正在使用统一构建一个启用 webgl 的应用程序以在浏览器中使用。

由于一些关于身份验证和 cookie 的问题,我们不得不使用.jslib插件将一些统一调用映射到网站代码中的 javascript 调用。

两个应用程序之间的代码映射工作正常,但我在其中一个插件函数中遇到了异步问题

我正在研究以下插件代码图:

  AuthenticatedGet: function (uri) {
    var uriString = Pointer_stringify(uri)

    var result = authenticatedGetRequest(uriString)

    var buffer = _malloc(lengthBytesUTF8(result) + 1)
    writeStringToMemory(result, buffer)

    return buffer
  },

在网站代码库中调用以下函数:


function authenticatedGetRequest(uri) {
  let endpoint = wpApiSettings.root + uri

  $.ajax({
    url: endpoint,
    method: "GET",
    beforeSend: function (xhr) {
      xhr.setRequestHeader("X-WP-Nonce", wpApiSettings.nonce)
    },
    data: {},
  })
    .done((response) => {
      // ? do we need to stringify?
      return JSON.stringify(response)
    })
    .fail((error) => {
      console.error(error)
      return error
    })
}

问题出在插件对authenticatedGetRequest. 由于该函数包含一个承诺,我需要等待异步调用完成。

我尝试重写代码以返回和处理承诺:

插件代码:

AuthenticatedGet: function (uri) {
    var uriString = Pointer_stringify(uri)

    var result = authenticatedGetRequest(uriString).then((response) => {
      var buffer = _malloc(lengthBytesUTF8(result) + 1)
      writeStringToMemory(result, buffer)

      return buffer
    })
  },

网站代码:

function authenticatedGetRequest(uri) {
  let endpoint = wpApiSettings.root + uri

  return $.ajax({
    url: endpoint,
    method: "GET",
    beforeSend: function (xhr) {
      xhr.setRequestHeader("X-WP-Nonce", wpApiSettings.nonce)
    },
    data: {},
  })
    .done((response) => {
      // ? do we need to stringify?
      return JSON.stringify(response)
    })
    .fail((error) => {
      console.error(error)
      return error
    })
}

但是这样做会导致统一方面的构建错误:

统一构建错误

我应该注意,如果我通过立即返回一个字符串(消除调用的异步性质)来伪造网站端的响应,那么一切正常。

一般来说,我对统一和 c# 很陌生,所以我不确定我在哪里出错了。有任何想法吗?

标签: javascriptc#unity3dasynchronous

解决方案


推荐阅读