JavaScript 中的 Promise 是如何工作的?

2023-11-30

我刚刚实现了我的第一个函数,它根据 AngularJS 中的另一个承诺返回一个承诺,并且它有效。但在我决定之前just为了做到这一点,我花了 2 个小时阅读并试图理解 Promise 背后的概念。我想,如果我可以编写一段简单的代码来模拟 Promise 的工作原理,那么我就能够从概念上理解它,而不是在不真正了解它如何工作的情况下使用它。我无法编写该代码。

那么,有人可以用普通 JavaScript 来说明 Promise 是如何工作的吗?


Promise 基本上是一个具有两个方法的对象。一种方法是定义要做什么,另一种方法是告诉何时做。必须能够以任意顺序调用这两个方法,因此该对象需要跟踪调用了哪一个:

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;
    }
  }
};

您可以先定义操作,然后触发它:

promise.done(function(){ alert('done'); });
promise.callDone();

您可以先触发操作,然后定义它:

promise.callDone();
promise.done(function(){ alert('done'); });

Demo: http://jsfiddle.net/EvN9P/

当您在异步函数中使用 Promise 时,该函数会创建空 Promise,保留对其的引用,并返回该引用。处理异步响应的代码将触发 Promise 中的操作,调用异步函数的代码将定义该操作。

由于其中任何一个都可以按任何顺序发生,因此调用异步函数的代码可以保留承诺并在需要时随时定义操作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaScript 中的 Promise 是如何工作的? 的相关文章

随机推荐