2016-07-05 20 views
1

我期待以下打印1 2 3。但它打印1 undefined 3。我錯過了什麼?ES2015承諾 - 我錯過了什麼?

var p = Promise.resolve('2'); 

new Promise(resolve => { console.log('1'); resolve(); }) 
    .then(p) 
    .then((result) => console.log(result, '3')); 
+4

你必須通過功能'then',而不是承諾。 – Bergi

+2

我記得你問過關於單子的問題。一個'Promise'是一個monad(雖然是一個奇怪的)。它是未來價值的上下文或容器。你不能以有意義的方式自己組合兩個上下文/容器,期望可以嵌套它們。但'then'(它只是'chain'或'bind')就是以避免嵌套'Promise'的方式來實現的。因爲'then'只是'chain',所以你可以傳遞函數給它返回一個Promise。 Monadic函數需要一個值並返回一個monad。 – ftor

回答

6

你需要用的p變量的匿名函數

var p = Promise.resolve('2'); 
 

 
new Promise(resolve => { console.log('1'); resolve(); }) 
 
    .then(() => p) 
 
    .then((result) => console.log(result, '3'));