【问题标题】:Javascript returning promises with then callbacksJavascript 返回带有 then 回调的承诺
【发布时间】:2019-08-25 10:02:12
【问题描述】:

我最近在一本书中看到了这种模式-> 如果我返回一个 Promise 以及它的回调,函数返回的值(数据类型)是什么:

function combineValues(p1,p1){
   return Promise.all([p1,p2])
           .then((d) => {
              return transformData(d);
           }
}

上面的combineValues函数的返回值怎么可能是一个promise??我们已经在要返回的内容的末尾添加了一个 .then。

然而 - 在这段代码下面是写的

let p1 = fetch('url1'), p2 = fetch('url2');
combineValues(p1,p2)
  .then(v => console.log(`combined value is ${v}`))

如果第一个代码 sn-p 只返回 - Promise.all([p1,p2]) - 那么第二个代码 sn-p 是可以理解的 - 但它正在返回

Promise.all([p1,p2]).then(something)

【问题讨论】:

  • .then 返回一个 Promise ... 这就是 Promise 链接的全部意义 - 因为 没有什么可以将异步变为同步 - 甚至量子计算也不行 - 顺便说一下,你的第一个代码 sn-p 将 transformData(d) 的结果作为承诺返回
  • documentation - 请注意,根据 documentation,.then 可能的每个返回值都是一个承诺
  • 知道了——所以 then 回调就像一个 promise 转换函数——但仍然是一个 promise——知道了!!
  • 我不知道a promise transform function 是什么,但.then returns a Promise 就是您需要知道的全部内容:p
  • 这是一个词 - 我只是链接在一起 - 就像一个函数来获取一个 promise 的解析值并将其转换为其他值

标签: javascript promise


【解决方案1】:

then always 根据定义返回一个承诺(并且它不能返回已解决的值:已解决的值在代码时不存在返回值被传递给正在运行)。

在第二个示例中,您不是在查看then 的返回值,而是在回调中记录。

【讨论】:

    猜你喜欢
    • 2016-03-09
    • 2016-06-15
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 2020-04-27
    相关资源
    最近更新 更多