在JavaScript中实现`promise`

时间:2015-01-05 23:12:54

标签: javascript node.js promise

我读过这篇文章:

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

对我来说,以前的代码看起来更合理。 发生了什么事?

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:1)

实际上创建待处理的承诺或延迟承诺是没有意义的......只需使用Promise.resolve

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

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

答案 1 :(得分:0)

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

var Promise = require("bluebird");

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

def.promise.then(console.log)

def.resolve(123) // 『123』

作品。