用原生JavaScript(ES5)来实现Promise的等效功能(异步回调)

简介: 用原生JavaScript(ES5)来实现Promise的等效功能(异步回调)

Promise常规写法

let promise = new Promise((resolve, reject)=>{
    //做一些异步操作
    setTimeout(function () {
        resolve("成功");
    }, 1000);
    setTimeout(function () {
        reject("失败");
    }, 2000);
});
promise.then(d => {
    console.log(d);
}).catch(d => {
    console.log(d);
});
//输出“成功”

JavaScript(ES5)实现

var promise = function (__then, __catch) {
    var _done = false;//记录是否已经执行了回调函数
    //做一些异步操作
    setTimeout(function () {
        _done || __then && __then("成功"),_done = true;
    }, 1000);
    setTimeout(function () {
        _done || __catch && __catch("失败"), _done = true;
    }, 2000);
};
promise(function(d) {
    console.log(d);
}, function(d) {
    console.log(d);
});
//输出“成功”


相关文章
|
3天前
|
自然语言处理 JavaScript 前端开发
JavaScript闭包是函数访问外部作用域变量的能力体现,它用于封装私有变量、持久化状态、避免全局污染和处理异步操作。
【6月更文挑战第25天】JavaScript闭包是函数访问外部作用域变量的能力体现,它用于封装私有变量、持久化状态、避免全局污染和处理异步操作。闭包基于作用域链和垃圾回收机制,允许函数记住其定义时的环境。例如,`createCounter`函数返回的内部函数能访问并更新`count`,每次调用`counter()`计数器递增,展示了闭包维持状态的特性。
17 5
|
1天前
|
前端开发 JavaScript
Promise是JavaScript解决异步问题的构造器,代表未来的不确定值。
【6月更文挑战第27天】Promise是JavaScript解决异步问题的构造器,代表未来的不确定值。它避免了回调地狱,通过链式调用`.then()`和`.catch()`使异步流程清晰。
7 2
|
2天前
|
JSON 缓存 前端开发
JavaScript 新特性:新增声明命令与解构赋值的强大功能
JavaScript 新特性:新增声明命令与解构赋值的强大功能
|
3天前
|
存储 前端开发 JavaScript
中间件回调和Promise
【6月更文挑战第18天】
6 1
|
4天前
|
SQL Web App开发 JavaScript
业务功能常用的JS代码片段
业务功能常用的JS代码片段
12 3
|
6天前
|
前端开发 JavaScript
JavaScript异步处理避免了单线程阻塞,如回调函数、Promise和async/await。
【6月更文挑战第22天】JavaScript异步处理避免了单线程阻塞,如回调函数、Promise和async/await。回调是基础,用于在操作完成后执行函数;Promise管理异步状态,支持链式调用;async/await提供同步代码外观,简化错误处理。每种技术在处理耗时任务时都起着关键作用。
13 3
|
20小时前
|
Web App开发 JavaScript iOS开发
技术笔记:js数组定义和方法(包含ES5新增数组方法)
技术笔记:js数组定义和方法(包含ES5新增数组方法)
|
1天前
|
JavaScript 前端开发
技术经验分享:javascript倒计数功能
技术经验分享:javascript倒计数功能
|
2天前
|
前端开发 JavaScript 安全
解锁 JavaScript ES6:函数与对象的高级扩展功能
解锁 JavaScript ES6:函数与对象的高级扩展功能
|
6天前
|
JavaScript 安全 前端开发
JS实现复制功能
JS实现复制功能
5 0