有关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')
}
阅读 4.6k
2 个回答

因为then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。因此可以采用链式写法,即then方法后面再调用另一个then方法。
它还是Promise,而非字符串。
参考阮一峰大神的es6,好好看看吧。

Promise/A+ 标准就是这么规定的. 所以所用对 Promise 的实现的库大都有这个特性, 包括ES6 对 Promise 的实现也遵守这条规定.
好处很多,比如 链式用法, 比如 用 returnthrow 来控制流程等

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题