为什么 promise.resolve 在异步函数中丢失了值?

why promise.resolve lost value inside of async function?

我知道我们在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 失败了..

如果你有一个值,你想立即解决一个承诺,你可以使用 Promise.resolve()

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