对象用于表示最终状态(成功/失败)及其同步操作的结果。
我们的出现可以优雅地处理异步操作和分离的痛苦。
上次我大约一个多月前看到的是,根据Promise/A+手写,花了两天时间才有很长的时间。他们中的大多数人都在云中。为了合并,我在周末再次写了这件事,以完全清楚地解决。这篇文章主要是拆卸及其周围的环境。
基本用途?
// Promise.js
const pengding ='待定'
const满足=“满足”
const被拒绝=“拒绝”
函数承诺(executor){
让那=这个
//初始状态是彭丁
this.status = pengding
//记录返回的结果值
this.value = null
//记录故障返回的结果值
此
函数解析(value){
if(that.status === pengding){
that.status =实现
that.value =值
}
}
函数拒绝(原因){
if(that.status === pengding){
that.status = recupld
that.reason =原因
}
}
执行人(解决,拒绝)
}
Promise.Prototype.then =函数(onfulfill,on Reprejectd){
if(this.status ===实现){
//致电成功回调
满足(this.value)
} else if(this.status === recuptd){
//呼叫失败恢复
重新注射(这个。
}
}
Module.exports = Promise引入了Promise的真实-Beggar版本,执行以上?
执行打印。
没有执行输出结果,打印功能的发现状态仍然是?它们将在下一个事件的宏任务中执行,并且将执行当前宏任务下的同步代码。因此,它仍然相同,因此没有输出结果。
在这种情况下,我们需要添加两个字段并恢复缓存和故障的成功,然后在时间执行缓存函数。
改进后,执行上述异步代码并成功打印。
在异步情况下添加一些材料,并多次执行不同的功能。
我发现我们的第一个代码未执行。LET分析原因:目前,我们仅使用一个变量来存储成功和失败。当我执行时,我的两个已按顺序执行。然后,第二个将涵盖第一个分配的回调函数,因此执行结果为。
改进较低的代码,我们使用使用的方式来存储所有回调功能。
首要任务是链式调用,主要处理是以下三种情况。基于该想法,每次执行新的情况都会创建新的情况,并且将上一个返回值传输到下一个方法的方法可以实现效果链条呼叫和价值穿透的原因相同。
改进代码的主要部分如下:
继续执行上述三个示例的代码,可以获得所有结果。
将内部逻辑更改为异步。
让我们分析原因:首先,这是事件周期的第一轮,因此将执行。第二,对于异步而言,我们具有成功的缓存和恢复功能,然后在等待或等待时执行它。我们缓存的只是回调函数,而不是对象,因此只需打包一层即可。
本地人将从与返回相同的错误中抛出。
添加参数并添加判断
执行错误并检查由于介质的初始化而导致的堆栈错误。
根据规范提示,您可以使用宏任务/微任务解决此问题。在这里,我选择宏任务的形式。
更改代码如下:
主要捕获错误
服用?确认
Beggar版本基本上满足了所有情况,但始终希望拥有一份证书,必须符合我们的规范。
执行官,没想到,一堆错误。根据提示,需要根据规范更改功能
到目前为止,更改已经完成。
诺言(value)
在给定值分析后返回对象。
手写实现
返回具有拒绝的对象。
基本实现
// Promise.js
const pengding ='待定'
const满足=“满足”
const被拒绝=“拒绝”
函数承诺(executor){
让那=这个
//初始状态是彭丁
this.status = pengding
//记录返回的结果值
this.value = null
//记录故障返回的结果值
此
函数解析(value){
if(that.status === pengding){
that.status =实现
that.value =值
}
}
函数拒绝(原因){
if(that.status === pengding){
that.status = recupld
that.reason =原因
}
}
执行人(解决,拒绝)
}
Promise.Prototype.then =函数(onfulfill,on Reprejectd){
if(this.status ===实现){
//致电成功回调
满足(this.value)
} else if(this.status === recuptd){
//呼叫失败恢复
重新注射(这个。
}
}
Module.exports = Promise9Promise.All(iToble)
接收承诺类型的输入(数组,地图,设置),仅返回一个实例。在所有回调结束后,执行该实例。执行后,将立即丢弃该错误。
基本用途
手写实现
回到一个,一旦解决或拒绝了迭代器中的承诺,就会解决或拒绝退回的承诺。
基本用途
手写实现
如果您有帮助,请不要犹豫?