如何调用异步函数
Posted
技术标签:
【中文标题】如何调用异步函数【英文标题】:How to call an async function 【发布时间】:2018-10-03 13:21:44 【问题描述】:我希望控制台首先打印“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
【问题讨论】:
***.com/questions/63482972/… 【参考方案1】:你应该await
async 函数,如果想等待它解决后再继续或使用.then()
await getHtml();
console.log('2');
或
getHtml()
.then(() =>
console.log('2');
);
【讨论】:
关于第一个建议:在主作用域/全局作用域使用await
是语法错误。
为了规避这个问题,您可以通过将您的 Js 文件 ext 更改为 .jsm 并在您的 html 脚本标签中键入 ='module' 来使用***等待【参考方案2】:
根据async_function MDN
返回值
将使用异步函数返回的值解析的 Promise,或因异步函数内抛出未捕获的异常而被拒绝。
async 函数将始终返回一个 promise,您必须使用 .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>
【讨论】:
【参考方案3】:将async
关键字放在函数之前使其成为异步函数。这基本上对函数做了两件事:
-
如果一个函数没有返回一个promise,JS引擎会将这个值包装到一个resolved的promise中。因此,该函数将始终返回一个承诺。
我们现在可以在这个函数中使用
await
关键字。 await
关键字使“等待”承诺得到解决成为可能。这让我们能够以同步的方式编写异步代码。例如this tutorial。
在您的示例中,console.log(2)
将始终首先完成,因为在 JS 应用程序中,同步代码总是先于异步代码完成。 Promise 始终是异步的,因此是 async
函数,顾名思义也是异步的。有关此检查的更多信息the event loop.
【讨论】:
以上是关于如何调用异步函数的主要内容,如果未能解决你的问题,请参考以下文章