JavaScript 中 `promise` 的实现

The implementation for `promise` in JavaScript

我读过这篇文章:

Callbacks are imperative, promises are functional: Node’s biggest missed opportunity

有一个代码:

var p1 = new Promise();
p1.then(console.log);
p1.resolve(42);

var p2 = new Promise();
p2.resolve(2013);
p2.then(console.log);

// prints:
// 42
// 2013

这对我来说很有意义。非常声明性的代码。

但是,一旦我真的在node.js中使用promise

npm bluebird

这是实际有效的代码:

var Promise = require('bluebird');

var r1;
var p1 = new Promise(function(resolve){
  r1 = resolve;
});

p1.then(console.log);
r1(42);

var r2;
var p2 = new Promise(function(resolve){
  r2 = resolve;
});

r2(2013);
p2.then(console.log);

对我来说,以前的代码看起来更合理。 怎么回事?

有什么想法吗?谢谢。

这只是令人困惑的实现故障。

var Promise = require("bluebird");

def = Promise.defer()
// {promise: <Promise>, resolve: <Function>, reject: <Function>}

def.promise.then(console.log)

def.resolve(123) // 『123』

有效。

实际上,创建一个待定的承诺或延迟根本没有意义..只需使用 Promise.resolve:

var p1 = Promise.resolve(42);
p1.then(console.log);

var p2 = Promise.resolve(2013);
p2.then(console.log);