鍍金池/ 問答/HTML/ 使用NodeJS Promise then 返回值的問題

使用NodeJS Promise then 返回值的問題

在自學(xué)Promise的時候遇到了如下現(xiàn)象:

var promise1 = Promise.resolve([1, 2, 3]);

function promise2() { 
  promise1.then(function(value) {
      return Promise.resolve(value);
  // expected output: Array [1, 2, 3]
  })
}

promise2().then(function(value){
    console.log(value);
})

運行報錯如下:

promise2().then(function(value){
          ^

TypeError: Cannot read property 'then' of undefined

加入return修改后正常返回

var promise1 = Promise.resolve([1, 2, 3]);

function promise2() { 
  return promise1.then(function(value) {
      return Promise.resolve(value);
  // expected output: Array [1, 2, 3]
  })
}

promise2().then(function(value){
    console.log(value);
})

想請問下這兩者背后的原理是什么?

回答
編輯回答
怣痛
  1. 不加 return promise2 返回的是 undefined 當(dāng)然沒有 then 方法;
  2. 如果你是想問 明明 return Promise.resolve(value) 是一個 promise對像卻在 then 里拿到了值 ;

其實是 promise/A+ 規(guī)范 規(guī)定的, 而nodejs是根據(jù)這個規(guī)范來實現(xiàn)Promise;

類似的還有下面:

var obj = {
    then: function(ok,no){
        ok('ok')
    }
}
Promise.resolve(obj).then(function(v){
    console.log(v);  //輸出 ok
})

總結(jié)起來就是: 如果返回的值是函數(shù)對像且有'then'方法,就會把這個'then'當(dāng)成promise對像的then去使用,
如果返回來還是有'then' 就繼續(xù)調(diào)...

2017年11月18日 07:21
編輯回答
任她鬧

(()=>{})().
undefined點啥啥報錯。
你寫了return返回了一個Promise對象,然后可以繼續(xù).then咯

clipboard.png

clipboard.png

2018年7月14日 03:20