我是Async的新手,等待生态系统,但我知道它以同步的方式提供编码方式(虽然它在幕后是异步的,只是在代码中编写的方式)。
所以这是我想以异步方式做的代码。
const axios = require("axios");
async function getJSONAsync(){
// The await keyword saves us from having to write a .then() block.
let json = await axios.get('https://tutorialzine.com/misc/files/example.json');
console.log('after the call to service');
// The result of the GET request is available in the json variable.
// We return it just like in a regular synchronous function.
return json;
}
let abc = getJSONAsync();
console.log('>>>>>>>>>>> abc', abc);
现在有一些我无法破解的查询,让我们先看看输出:
>>>>>>>>>>> abc Promise { <pending> }
after the call to service
请提出一些看法?
提前感谢,并且编码很快:)。
答案 0 :(得分:4)
您需要使用等待在另一个异步功能中调用getJSONAsync
:
async function main() {
let abc = await getJSONAsync();
console.log(abc);
// ...
}
main();
或者调用它并等待返回的承诺解决(即使用Promise.prototype.then
)
答案 1 :(得分:3)
当您遇到异步调用时,程序的控制权将返回到调用方法,直到异步调用完成。
因此,在您的情况下,您调用异步方法,它发送和异步请求以获取资源并返回到先前(在callstack上)方法。 在那个方法中,你然后尝试记录abc,在那个时间点,它仍然在获取资源,所以你只需要打印一个待处理的promise。 当异步调用最终完成时,控制权将返回给您的getJSONAsync()方法,控制台日志会打印出消息
答案 2 :(得分:1)
将异步函数结果绑定到变量,然后记录该变量,该变量当时是未解析的Promise。当您收到请求的响应时,会出现第二个console.log。
要回答您的问题,async / await行为仅应用于异步函数,而不应用于调用此函数的其他代码部分等。
答案 3 :(得分:1)
好吧,在深入研究 async-await 魔术之后,我发现如果您只是尝试检查一些东西,这样做会更好:
const axios = require("axios");
async function getJSONAsync(){
let json = await axios.get('https://tutorialzine.com/misc/files/example.json');
console.log('after the call to service');
return json;
}
(async()=>{
let abc = await getJSONAsync();
console.log('>>>>>>>>>>> abc', abc);
})();
在这里,我创建了一个异步匿名函数,该函数在创建后立即被调用。如果有人有任何疑问,请告诉我。