为什么 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
回调一起使用,没有办法解决它。
我知道我们在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
回调一起使用,没有办法解决它。