代码如下所示。数据结果为 hhh
。
我不明白为什么,可以输出 hhh
,因为 hhh
并不是被resolve,而是在.then
中被return的值。
若理解为,return promise().then()
会执行完.then
操作,则testFunction
返回的应该是 hhh
字符串,这样的话 testVal
为何仍可使用.then
操作?
function getInput (fileName) {
const promise = new Promise((resolve, reject) => {
setTimeout(_ => {
resolve(fileName)
}, 2000)
})
return promise
}
const testFunction = (nothing) => {
return getInput('a.json').then(_ => {
return 'hhh'
})
}
let testVal = testFunction()
testVal.then(res => {
console.log(res);
})
若去掉.then
操作,testFunction
改为如下所示,则输出为a.json
const testFunction = (nothing) => {
return getInput('a.json')
}
因为
then
方法返回的是一个新的Promise
实例(注意,不是原来那个Promise
实例)。因此可以采用链式写法,即then
方法后面再调用另一个then
方法。它还是
Promise
,而非字符串。参考阮一峰大神的es6,好好看看吧。