为什么promise.resolve异步函数内的丢失值?

时间:2018-11-12 10:57:25

标签: ecmascript-6 promise resolve

我知道我们在JavaScript中使用promise时,通常会使用以下两种方式。

var f1 = () => {
  return new Promise( (resolve, reject) => {
    resolve(10);
  })
}

var f2 = () => {
  return Promise.resolve(10)
}

f1().then( data => { console.log(data) })  // 10
f2().then( data => { console.log(data) })  // 10

但是,如果我在promise中使用异步函数,Promise.resolve将丢失如下所示的值。

const fs = require('fs')

var f1 = () => {
  return new Promise( (resolve, reject) => {
    fs.readFile('data.txt', (err, data) => {
      resolve(data);
    })
  })
}

var f2 = () => {
  return Promise.resolve()
  .then(() => {
    fs.readFile('data.txt', (err, data) => {
      //return data              --> undefined
      //Promise.resolve(data)    --> undefined
      return Promise.resolve()   --> undefined
    })
  })
}

f1().then( data => { console.log('1,',data) })
f2().then( data => { console.log('2,',data) })

我认为我对Promise.resolve使用错误的方式,或者Promise.resolve不支持异步功能...有人告诉我Promose.resolve失败的原因。

1 个答案:

答案 0 :(得分:2)

如果您有一个要立即用来兑现承诺的值,则可以使用Promise.resolve()

如果您在回调中异步获取值,则必须new Promise构造函数与resolve / reject回调一起使用,就无法解决它。