await 和 async使用
时间: 2023-10-20 16:35:06 浏览: 139
await 和 async 是用于处理异步操作的关键字。在 Crystal 中,可以通过添加 await 和 async 关键字来支持异步操作。为此,您需要安装一个名为 await_async 的库,并将其添加到您的项目的依赖项中。您可以在 shards.yml 文件中添加以下内容:
```yaml
dependencies:
await_async:
github: anykeyh/await_async
branch: master
```
安装完成后,您可以使用 `require "await_async"` 来导入该库。接下来,您可以使用 `async` 关键字定义一个异步函数,该函数可以在内部使用 `await` 关键字来等待其他异步操作完成。例如,您可以编写以下代码:
```crystal
future = async fetch_data()
result = await future
puts result
```
在上述代码中,`fetch_data` 函数是一个异步函数,它返回一个 Future 对象。您可以使用 `await` 关键字等待该 Future 对象的结果,并将其赋值给 `result` 变量。然后,您可以打印出结果。
在 JavaScript 中,您可以使用 `async` 和 `await` 关键字以类似的方式处理异步操作。例如,您可以编写以下代码:
```javascript
async function doIt() {
console.time("doIt");
const time1 = 300;
const time2 = await step1(time1);
const time3 = await step2(time2);
const result = await step3(time3);
console.log(`result is ${result}`);
console.timeEnd("doIt");
}
doIt();
```
在上述代码中,`doIt` 函数是一个异步函数,它使用 `await` 关键字等待 `step1`、`step2` 和 `step3` 函数的结果,并最终打印出结果。
此外,`async` 也可以用于声明匿名函数或嵌套函数。如果您想在 `await` 后面使用一个异步函数形式的函数,该函数需要立即执行并返回一个值。例如,您可以编写以下代码:
```javascript
let fn = async function() {
let a = await (async function() {
console.log(1);
return 2;
})();
console.log(a);
async function fn2() {
return 3;
}
console.log(await fn2());
}
fn();
```
在上述代码中,`fn` 是一个异步匿名函数,它使用 `await` 关键字等待内部的异步函数执行,并打印出结果。
总之,`await` 和 `async` 关键字可以帮助您更方便地处理异步操作,无论是在 Crystal 还是 JavaScript 中。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [await_async:提供对Crystal Lang的await和async方法](https://download.csdn.net/download/weixin_42146086/18991080)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [async/await的基础用法](https://blog.csdn.net/Kimser/article/details/115165559)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [async 与 await 的用法详解](https://blog.csdn.net/qq_31967569/article/details/124894809)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
阅读全文