前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「Dart」异步编程

「Dart」异步编程

原创
作者头像
杨不易呀
发布2024-01-02 01:02:51
1552
发布2024-01-02 01:02:51
举报
文章被收录于专栏:Flutter18杨不易呀

前言

  • 在 JavaScript 和 Dart 中,异步编程是一个 非常重要 的概念
  • 我将通过一些基本的异步编程示例来展示两种语言的异同

异步函数(Async Functions)

JavaScript

在 JavaScript 中,异步函数通常通过 async 关键字和 await 表达式来实现。

代码语言:javascript
复制
async function fetchData() {
    let response = await fetch('https://api.example.com/data');
    let data = await response.json();
    console.log(data);
}

fetchData();

Dart

Dart 也使用 asyncawait 关键字来处理异步操作。

代码语言:js
复制
Future<void> fetchData() async {
    var response = await http.get(Uri.parse('https://api.example.com/data'));
    var data = jsonDecode(response.body);
    print(data);
}

void main() {
    fetchData();
}

异同点

  • 两种语言都使用 asyncawait 关键字。
  • Dart 需要使用 Future 类型来表示异步操作的结果。

事件循环和异步回调

JavaScript

JavaScript 依赖于事件循环和回调函数来处理异步操作。

代码语言:javascript
复制
console.log('Start');

setTimeout(() => {
    console.log('Inside timeout');
}, 1000);

console.log('End');

Dart

Dart 同样有事件循环,可以使用类似的方式处理异步操作。

代码语言:js
复制
void main() {
    print('Start');

    Future.delayed(Duration(seconds: 1), () {
        print('Inside timeout');
    });

    print('End');
}

异同点

  • 两种语言都有事件循环的概念。
  • JavaScript 使用 setTimeout,Dart 使用 Future.delayed
  • 两者在语法上略有差异,但概念相似。

Future

在 Dart 中,Future 是一个核心类,用于表示一个异步操作的结果。它与 JavaScript 中的 Promise 相似,代表一个可能在未来某个时刻才会完成的计算。当异步操作完成时,Future 要么成功返回一个值,要么抛出一个错误。

基本概念

  • Future: 用于处理异步操作,可以返回一个值或错误。
  • then(): 当 Future 完成时,then() 方法被调用,用于处理返回的值。
  • catchError(): 用于处理 Future 抛出的错误。
  • await: 在 async 函数中使用,等待 Future 完成并获取其结果。
  • async: 标记一个函数为异步函数,允许在函数内使用 await

示例代码

创建和使用 Future:

代码语言:js
复制
Future<String> fetchUserData() {
    // 模拟异步操作,例如从服务器获取数据
    return Future.delayed(Duration(seconds: 2), () {
        return "User data";
    });
}

void main() {
    fetchUserData().then((data) {
        print(data); // 打印返回的数据
    }).catchError((error) {
        print(error); // 处理可能发生的错误
    });
}

使用 async 和 await:

async 和 await 关键字提供了一种更直观的方式来处理异步操作。

代码语言:js
复制
Future<String> fetchUserData() {
    return Future.delayed(Duration(seconds: 2), () {
        return "User data";
    });
}

Future<void> printUserData() async {
    try {
        var userData = await fetchUserData();
        print(userData);
    } catch (e) {
        print(e);
    }
}

void main() {
    printUserData();
}

在这个例子中,fetchUserData() 返回一个 Future<String>,表示异步获取用户数据的过程。在 printUserData() 函数中,我们使用 await 关键字等待 Future 完成,然后打印结果或捕获并处理错误。

通过这种方式,Dart 使异步编程更加直观和易于管理,特别是在处理复杂的异步操作和多个 Future 时。

在Dart语言中,“Future”是一种用于表示异步操作的对象。当你需要执行一个耗时操作,比如从网络获取数据、读取文件等,这些操作通常不会立即完成,“Future’就是用来处理这种情况的。使用“Future 可以让你的程序继续执行其他任务,而不必等待这个耗时操作完成。

End

  • 🐤如果您对本文有任何疑问或想法,请在评论区留言,我将很乐意与您交流。
  • 🐰您的每一条评论对我都至关重要,我会尽快给予回复。
  • 🎈如果您觉得这篇文章对您有所启发或帮助,请不吝赞赏、收藏或分享。
  • 🎁您的每一个动作都是对我创作的最大鼓励和支持。
  • 👍谢谢您的阅读和陪伴!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 异步函数(Async Functions)
    • JavaScript
      • Dart
        • 异同点
        • 事件循环和异步回调
          • JavaScript
            • Dart
              • 异同点
              • Future
                • 基本概念
                  • 示例代码
                  • End
                  领券
                  问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档