Typescript: promise.then()仍然返回一个promise
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; })
我想确保我理解正确。非常感谢您的帮助。
在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()方法中返回一个新的值,以供下一个回调函数使用。
问题的原因:
问题出在代码的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