我希望控制台能够打印' 1'首先,但我不知道如何在进入下一行代码之前调用异步函数并等待其执行。
const request = require('request');
async function getHtml()
{
await request('https://google.com/', function (error, response, body) {
console.log('1');
});
}
getHtml();
console.log('2');
当然,我得到的输出是
2
1
答案 0 :(得分:10)
返回值
一个Promise,它将使用async函数返回的值进行解析,或者在异步函数中抛出未捕获的异常而被拒绝。
异步函数将始终返回一个承诺,您必须使用.then()
或await
来获取其值
async function getHtml() {
const request = await $.get('https://jsonplaceholder.typicode.com/posts/1')
return request
}
getHtml()
.then((data) => { console.log('1')})
.then(() => { console.log('2')});
// OR
(async() => {
console.log('1')
await getHtml()
console.log('2')
})()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 1 :(得分:1)
在函数之前放置async
关键字使其成为异步函数。这基本上对函数做了两件事:
await
关键字。 await
关键字可以让您等待&#39;希望得到解决。这让我们以同步方式编写异步代码。例如this tutorial。 在您的示例中,console.log(2)
将始终首先完成,因为在JS应用程序中,同步代码始终在异步代码之前完成。 Promise总是异步的,因此是async
函数,因为名称暗示也是异步的。有关详细信息,请查看the event loop.
答案 2 :(得分:0)
你应该qq_duck = Duck("QQ")
I've decided to change my name into QQ .
So please call me QQ from now on! Quack!
I've decided to change my name into QQ .
So please call me QQ from now on! Quack!
I've decided to change my name into QQ .
So please call me QQ from now on! Quack!
...
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "<input>", line 3, in __init__
File "<input>", line 13, in name
File "<input>", line 13, in name
File "<input>", line 13, in name
[Previous line repeated 488 more times]
File "<input>", line 11, in name
RecursionError: maximum recursion depth exceeded while calling a Python object
async函数,如果想在继续使用之前等待它解决或使用await
.then()
或
await getHtml();
console.log('2');