M.K*_*afi 22 javascript asynchronous
我刚刚实现了我的第一个函数,该函数返回基于AngularJS中另一个promise的promise,并且它有效.但在此之前,我决定只做到这一点,我花了2小时来阅读,并试图了解背后的承诺的概念.我想如果我能编写一段模拟承诺如何工作的简单代码,那么我就能够在概念上理解它,而不是在不知道它是如何工作的情况下使用它.我无法编写该代码.
那么,有人可以用vanilla JavaScript来说明承诺是如何运作的吗?
Guf*_*ffa 34
承诺基本上是一个有两种方法的对象.一种方法是定义要做什么,一种是告诉何时做.必须能够以任何顺序调用这两个方法,因此对象需要跟踪已调用的方法:
var promise = {
isDone: false,
doneHandler: null,
done: function(f) {
if (this.isDone) {
f();
} else {
this.doneHandler = f;
}
},
callDone: function() {
if (this.doneHandler != null) {
this.doneHandler();
} else {
this.isDone = true;
}
}
};
Run Code Online (Sandbox Code Playgroud)
您可以先定义操作,然后触发它:
promise.done(function(){ alert('done'); });
promise.callDone();
Run Code Online (Sandbox Code Playgroud)
您可以先触发操作,然后定义它:
promise.callDone();
promise.done(function(){ alert('done'); });
Run Code Online (Sandbox Code Playgroud)
在异步函数中使用promise时,该函数会创建空的promise,保留对它的引用,并返回引用.处理异步响应的代码将触发promise中的操作,调用异步函数的代码将定义操作.
由于其中任何一个都可以按任何顺序发生,因此调用异步函数的代码可以挂起promise并在任何时候定义动作.