【问题标题】:Can then be called if the first callback does not return a Promise?如果第一个回调没有返回 Promise,那么可以调用吗?
【发布时间】:2017-04-11 04:05:45
【问题描述】:

我正在浏览Chain-ability of Promises,代码如下所示:

Promise.resolve(123)
    .then((res) => {
        console.log(res); // 123
        return 456;
    })
    .then((res) => {
        console.log(res); // 456
        return Promise.resolve(123); // Notice that we are returning a 
Promise
    }) 

第一个回调不返回一个承诺,但其余的。语句.then((res) => { console.log(res);return 456;})完成后可以调用then吗?

【问题讨论】:

  • .then always 返回一个承诺 - 如果需要,您在回调中返回的内容是“承诺的”

标签: javascript typescript ecmascript-6 es6-promise


【解决方案1】:

正如@jaromanda-x 提到的,

then 方法返回一个允许方法链接的 Promise。

你可以传递一个 lambda 给 then,如果它返回一个 promise,一个 等效的 Promise 将暴露给随后的 then 在 方法链。下面的 sn-p 模拟异步代码 setTimout 函数。

当简单地从 then lambda 中返回一个值时,它将有效地返回 Promise.resolve(<value returned by whichever handler was called>)

示例

var p2 = new Promise(function(resolve, reject) {
  resolve(1);
});

p2.then(function(value) {
  console.log(value); // 1
  return value + 1;
}).then(function(value) {
  console.log(value + '- This synchronous usage is virtually pointless'); // 2- This synchronous usage is virtually pointless
});

p2.then(function(value) {
  console.log(value); // 1
});

阅读更多MDN

【讨论】:

    猜你喜欢
    • 2013-11-02
    • 2013-02-06
    • 2016-03-06
    • 2018-04-18
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2021-01-13
    • 1970-01-01
    相关资源
    最近更新 更多