資料を漁ってもよくわからないので、サンプルコードを書く。
$ cat p.js
var f = function(resolv, reject){
console.log("hello");
resolv("goodbye");
};
console.log("f");
var p = new Promise(f);
console.log("p");
p.then(function(result){
console.log(result);
});
console.log("t");
実行結果。Promise を new したらすぐに実行されてる。
$ node p.js
f
hello
p
t
goodbye
実行された後でも、then メソッドで後の処理を指定できているのもわかる。then メソッドで指定した処理は非同期に実行されている。
Promise を new した時点で実行されてしまうのは何だか不思議な気がする(実行されたあとに then を付けることができるのもおかしいとまでは言わないけど不思議な感じ)。
↓こういう処理ができるもんだと期待していたんだけど、ちがった。
var f = function(resolv, reject){
console.log("hello");
resolv("goodbye");
};
// Promise たくさん作ってから、
var p1 = new Promise(f);
var p2 = new Promise(f);
var p3 = new Promise(f);
// 逐次処理するためのオブジェクトが用意されてるのかなと期待してた
var b = new Batch[p1, p2, p3];
b.start(); // ← ここで実行
今回の実行環境: Mac OS X El Capitan + Node.js 6.1.0
$ uname -mrsv
Darwin 15.4.0 Darwin Kernel Version 15.4.0: Fri Feb 26 22:08:05 PST 2016; root:xnu-3248.40.184~3/RELEASE_X86_64 x86_64
$ node --version
v6.1.0
-
ref.
- Promise - JavaScript | MDN
- Promise.prototype.then() - JavaScript | MDN
- ECMAScript 2015 Language Specification – ECMA-262 6th Edition - 25.4.5.3 Promise.prototype.then ( onFulfilled , onRejected )
- ECMAScript 2015 Language Specification – ECMA-262 6th Edition - 25.4.5.3.1 PerformPromiseThen ( promise, onFulfilled, onRejected, resultCapability )
tags: node.js javascript
Posted by NI-Lab. (@nilab)