【问题标题】:Node async axios节点异步 axios
【发布时间】:2020-10-19 03:50:09
【问题描述】:

帮助解决节点和异步问题。 在第一个函数中,我从外部 api 获取令牌 -

const Token = function getToken(data)
return axios(config)
.then((response) =>
this.response = response.data;
return this.response.access_token;)
.catch(function (error)
console.log(error);
);

然后,在下面的函数中,我可以把这个令牌输出到屏幕上——

const myToken = Token(data);
myToken.then(function (result)
console.log(result); //here I see a real token
);

那我怎么能使用这个令牌呢?

Trying to do so -
const test = myToken;
console.log(test);

给予 - 未决的承诺

【问题讨论】:

标签: async-await


【解决方案1】:

将令牌值分配给then内外部范围内的变量

let token = '';
myToken.then(function (result)
    token = result;
);

【讨论】:

  • 然后 console.log(token);令牌 - 为空
  • 你的意思是 axios(config) 吗?
【解决方案2】:

你可以使用await -

const token = await myToken

await 将解压promise 的值,类似于.then(),但让我们使用更同步的代码风格。

请注意,您还需要使用 async 关键字装饰上述代码所在的函数。

https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Asynchronous/Async_await

【讨论】:

  • const token = await myToken; ^^^^^ SyntaxError: await 仅在异步函数中有效
  • 我已经调查过了,但是......你能给我一个例子代码吗
  • 我认为你并没有完全把握承诺。您可以使用 .then() 或 async/await。您的问题表明您不想将所有代码放在 then 回调中,因此您的另一个选择是使用 async + await。这很简单,无论你有const token = await myToken 的任何功能,你都需要将async 放在function 前面,即async function。现在这使得这个函数返回一个承诺,所以无论它是否被调用,你都需要将它作为一个承诺来处理,再次使用 .then() 或 async + await
  • “我认为你没有完全理解这些承诺。”是的,这是我的第一次体验。您能否为我的案例提供一个示例代码。
  • 我在我的回答和 cmets 中做了,我建议你看看一些关于 js 承诺的在线文档以及使用 .then() 和使用 async + await 之间的区别。您将能够轻松地将所学知识应用到您的代码中。
猜你喜欢
  • 2023-03-22
  • 2020-11-21
  • 1970-01-01
  • 2020-03-30
  • 2013-07-11
  • 2015-08-19
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多