有关promise疑问,return promise().then(return '1'),为何仍返回promise类型
代码如下所示。数据结果为 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')
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
因为
then
方法返回的是一个新的Promise
实例(注意,不是原来那个Promise
实例)。因此可以采用链式写法,即then
方法后面再调用另一个then
方法。它还是
Promise
,而非字符串。参考阮一峰大神的es6,好好看看吧。
Promise/A+ 标准就是这么规定的. 所以所用对
Promise
的实现的库大都有这个特性, 包括ES6
对 Promise 的实现也遵守这条规定.好处很多,比如 链式用法, 比如 用
return
和throw
来控制流程等