javascript-如何将回调结果传递给变量并自由访问var

前端之家收集整理的这篇文章主要介绍了javascript-如何将回调结果传递给变量并自由访问var 前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

我有一个来自本机函数桥的回调,这就是我在JS上使用它的方式:

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

我已经尝试过这样做以获得数据的价值:

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之外的数据值,我该怎么做呢?

我需要获取getAllParameter的结果并自由使用它的原因是因为我在数据内部具有令牌值,并且需要在axios实例配置中使用该令牌

因此,我文件的完整代码应为:

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);
   });
})();

所以,我在做的是

>创建一个名为data的变量;
>将回调响应分配给我的数据变量. (阅读闭包和箭头功能)
>稍后使用.

但是这是我的代码的局限性:当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();

猜你在找的JavaScript相关文章