当前位置: 首页 > news >正文

JavaScript的异步编程

目录

目标

实战

回调函数 (Callback)

Promise


目标

        了解异步编程实现方式。


实战

回调函数 (Callback)

        当某个任务完成后,调用回调函数来处理结果。它通常会导致回调地狱,即嵌套多个回调函数,官方不推荐使用。

function fetchData(callback) {
    setTimeout(function() {
        callback(3,4);
    }, 1000);
}

fetchData(function(x,y) {
    //1秒后输出12
    console.log(x*y)
});

Promise

        官方推荐用Promise代替Callback,其中:resolve():表示操作成功,返回值。reject():表示操作失败,返回错误。

传递一个参数

var myPromise = new Promise(function(resolve, reject) {
    //throw new Error("程序错误。");
    var success = true;
    if (success) {
        resolve("你好。");
    } else {
        reject("执行错误。");
    }
});

myPromise.then(function(x) {
    console.log(x); 
}).catch(function(error) {
    console.log("报错了"); // 如果失败,会打印出错误信息
    console.log(error);
});

用async/await方式调用

function fetchData() {
    return new Promise(function(resolve, reject){
        setTimeout(function(){
            resolve("你好。");
        }, 2000);
    });
}
//方法一
async function getData() {
    console.log("开始获取数据...");
    let result = await fetchData(); // 等待 fetchData 执行完毕
    console.log(result); //输出:你好
}

getData();

//方法二
fetchData().then(function(result) {
    console.log(result); // 2 秒后输出:"你好。"
});

传递多个参数

        可以用对象或者数组作为参数。

var myPromise = new Promise(function(resolve, reject) {
    var success = true;
    if (success) {
        resolve({ x: 3, y: 5 }); // 传递一个对象
    } else {
        reject("执行错误。");
    }
});

myPromise.then(function(result) {
    console.log(result.x * result.y); // 输出 15
}).catch(function(error) {
    console.log(error);
});

相关文章:

  • 第二章:ROS架构_《ROS机器人开发实践》_notes
  • Qt实现HTTP GET/POST/PUT/DELETE请求
  • 智慧路灯网络安全入侵监测
  • 将页面导出为PDF
  • MCP客户端Client开发
  • 蓝桥杯---BFS解决FloofFill算法1---图像渲染
  • 在应急现场快速组建临时窄带集群对讲网络的详细步骤
  • Android 15 NAS、RRC、earfcn等网络信息获取方式
  • Linux中常用的文件管理命令
  • 关于希尔伯特变换小记
  • 深入解析:HarmonyOS Design设计语言的核心理念
  • 每天学一个 Linux 命令(7):cd
  • 量子退火与机器学习(2):少量实验即可找到新材料,黑盒优化➕量子退火
  • 文件IO 1(接上多线程14)
  • 算法正确性证明之循环不变量
  • SQL学习总结
  • git windows安装教程
  • 全国节能宣传周线上知识竞赛
  • tsconfig.json中的noImplicitAny的说明
  • arduinoIDE快速安装开发板,解决报错问题,解决安装不上,卡住的问题
  • 西安网站建设托管/百度关键词购买
  • 中小型网站服务器搭建方案/苏州seo公司
  • wordpress 文章合集/优化seo公司哪家好
  • 集团定制网站建设公司/班级优化大师app下载学生版
  • 上海 网站平台开发/网站关键词推广优化
  • 云南app开发制作/郑州搜索引擎优化公司