Typescript: promise.then()仍然返回一个promise

15 浏览
0 Comments

Typescript: promise.then()仍然返回一个promise

我曾理解过then() promise方法总是自己返回一个promise。承诺是我还在逐渐适应的东西,所以我只是看了一些例子并进行了一些尝试。以下示例显示then方法的返回值是一个对象。

const foo = true;
const myPromise = new Promise((resolve, reject) => {
    setTimeout(() => {
        if (foo) {
            resolve('Do this');
        } else {
            reject(Error("Do that"));
        }
    }, 1500)
})
const bar = myPromise.then(value => value);
console.log(typeof bar); // object

这是否与返回一个promise相同?还是我需要明确告诉then返回一个promise,像这样(伪代码,我知道不正确):

.then(value => {
    // 做些什么
    return new Promise;
})

我想确保我理解正确。非常感谢您的帮助。

0
0 Comments

在Typescript中,使用promise.then()方法时,它仍然会返回一个Promise对象。promise.then()方法接受最多两个参数:用于处理Promise成功和失败情况的回调函数。

问题的出现原因是promise.then()方法的返回值是一个Promise对象,而不是直接返回回调函数的结果。这意味着在使用promise.then()方法后,我们无法直接访问、处理回调函数的返回值,而是得到一个新的Promise对象。

解决方法是使用promise.then()方法的链式调用。通过在promise.then()方法后继续调用.then()方法,我们可以对回调函数的返回值进行处理,并且继续链式调用其他的.then()方法。

例如,假设我们有一个返回Promise对象的函数getPromise(),我们可以使用promise.then()方法链式调用多个回调函数,如下所示:

getPromise()
  .then((result) => {
    console.log(result); // 处理第一个回调函数的返回值
    return result + 1; // 返回一个新的值
  })
  .then((result) => {
    console.log(result); // 处理第二个回调函数的返回值
    return result + 1; // 返回一个新的值
  })
  .then((result) => {
    console.log(result); // 处理第三个回调函数的返回值
  });

通过使用promise.then()方法的链式调用,我们可以依次处理每个回调函数的返回值,并且可以在每个.then()方法中返回一个新的值,以供下一个回调函数使用。

总结起来,Typescript中的promise.then()方法仍然返回一个Promise对象,而不是直接返回回调函数的结果。为了处理回调函数的返回值,并且继续链式调用其他的.then()方法,我们可以使用promise.then()方法的链式调用。这样,我们可以依次处理每个回调函数的返回值,并且可以在每个.then()方法中返回一个新的值,以供下一个回调函数使用。

0
0 Comments

问题的原因:

问题出在代码的pseudocode中,它给出了错误的then()函数的使用方式。实际上,then()函数接受两个参数:onFulfilled和onRejected。正确的使用方式应该是p.then(onFulfilled[, onRejected])。

解决方法:

为了正确使用then()函数,我们需要按照正确的语法格式编写代码。可以参考Promise构造函数的使用方式,使用then()函数创建一个新的promise。通常情况下,我们会忽略onRejected参数,因为我们可以使用catch来处理reject的情况。

相关链接:

这是一篇有趣的文章,介绍了promise在JavaScript中的使用:https://medium.com//what-are-promises-in-javascript-f1a5fc5b34bf

还可以参考then()函数的文档:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

0