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);
我读过这篇文章:
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);