我如何将回调的结果传递到变量并自由访问VAR



我知道有很多与我的问题相似的问题,但是我没有看到任何好案例可以帮助我,

我有来自本机功能桥的回调,这是我在JS上使用它的方式:

getAllParameter((data)=>{
  console.log(data) // data is Javascript Object
})

我已经尝试过以获取data的值:

getAllParameter((data)=>{
  return new Promise((resolve)=> resolve(showToken(data.Token)))
})
async function showToken(token){
  var res = await token
  return res
}
var isiToken = showToken()
console.log("isiToken")
console.log(isiToken)

,但结果是:

isiToken
{ _40: 0, _65: 0, _55: null, _72: null }

我不知道我的代码有什么问题,我想在getAllParameter之外获得data的值,我该如何正确执行?

我需要获得getAllParameter的结果并自由使用的原因是因为我在data内有token值,并且我需要在axios实例config

中使用令牌

所以我的文件的完整代码应该是:

getAllParameter((data)=>{
  return new Promise((resolve)=> resolve(showToken(data.Token)))
})
async function showToken(token){
  var res = await token
  console.log("res")
  console.log(res)
  return res
}
var isiToken = showToken()
console.log("isiToken")
console.log(isiToken)
const http = Axios.create ({
  baseURL: Constants.APILink,
  timeout: Constants.Timeout,
  headers: {'Content-Type': 'application/json', 'Authorization': 'bearer '+isiToken}
export default http
});

我不确定您的getAllParameter定义,但是该方法应该在最后调用您的回调。希望这样做,这里是您想要的

的片段
(function() {
   var data;
   function getAllParam(callback) {
      console.log("getAllParam");
      callback("getAllParam");
   }
   getAllParam((data)=> {
      this.data = data);
      console.log(this.data);
   });
})();

所以,我正在做的是

  1. 创建一个称为数据的变量;
  2. 将回调响应分配给我的数据变量。(在箭头函数中读取关闭& amp;)
  3. 稍后使用。

但这是我的代码的限制:当getAllParam是异步函数时,这是不起作用的。意味着如果未按顺序调用回调。然后,您必须使用承诺。

编辑

app.js

function getAllParam(callback) {
    console.log("getAllParam");
    callback({Token: "getAllParam"});
}
var httpPromise = new Promise(resolve => {
    getAllParam((data) => {
        let token = data.Token;
        console.log("Creating http from here using token");
        let http = Axios.create({ bearer: token});
        resolve(http);
    })
});
export default httpPromise;

file_that_imports_app_js.js

import httpPromise from "./app.js";
async function init() {
    let http = await httpPromise;
    http.get("/", ...)
}
init();

最新更新