0

I've read this article:

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

There's a code:

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

This makes sense to me. Very declarative code.

However, once I really use promise in node.js doing

npm bluebird

Here is the actuall code that does work:

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

To me the former code looks more reasonable. What is going on?

Any idea? Thanks.

2 Answers2

1

Actually it doesn't make sense to create a pending promise or deferred at all.. just use Promise.resolve:

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

var p2 = Promise.resolve(2013);
p2.then(console.log);
Esailija
  • 138,174
  • 23
  • 272
  • 326
  • I actually want to `resolve` in any time, even after `then` is called. But thanks. –  Jan 07 '15 at 02:21
  • @KenOKABE oh, in that case you just want to chain from the already returned promise. If something doesn't return a promise you can promisify it, going and resolving stuff yourself results in really ugly code – Esailija Jan 07 '15 at 02:55
0

It is just confusing implementation glitch.

var Promise = require("bluebird");

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

def.promise.then(console.log)

def.resolve(123) // 『123』

works.