我知道我们在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失败的原因。
答案 0 :(得分:2)
如果您有一个要立即用来兑现承诺的值,则可以使用Promise.resolve()
。
如果您在回调中异步获取值,则必须将new Promise
构造函数与resolve
/ reject
回调一起使用,就无法解决它。