【问题标题】:Is it possible to create an object of type Promise<Promise<T>> in JavaScript?是否可以在 JavaScript 中创建 Promise<Promise<T>> 类型的对象?
【发布时间】:2021-04-01 14:46:01
【问题描述】:

所有这 3 个语句都返回 Promise&lt;T&gt; 而不是 Promise&lt;Promise&lt;T&gt;&gt;

// first  
const foo = Promise.resolve(Promise.resolve(42))

// second
function bar() {
    return new Promise((resolve, reject) => {
        resolve(new Promise((resolve, reject) => {
            resolve(42)
        }));
    })
}

// third
function baz() {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(42)
                }, 1000)
            }))
        }, 1000)
    })
}

foo.then(console.log)  // 42
bar().then(console.log)  // 42
baz().then(console.log)  // 42

是否可以在 JavaScript 中创建一个 Promise 来解析另一个 Promise

【问题讨论】:

  • 这个的用例是什么?

标签: javascript typescript promise


【解决方案1】:

没有。

如果一个 Promise 的解析值是另一个 Promise,那么它将被采用。

【讨论】:

  • 这是真的吗?在 C# 中,使用 Task&lt;Task&lt;T&gt;&gt; 并使用双 await 来解决它们并不罕见。
  • 是的,这是真的,这就是我写它作为答案的原因。
  • 请注意,microsoft/TypeScript#27711 存在一个现有请求,可以禁止 Promise&lt;Promise&lt;T&gt;&gt; 或自动将其折叠为 Promise&lt;T&gt;。这仍然是一个悬而未决的问题……但它确实表明,尽管 TypeScript 允许您编写类型,但 JavaScript 中确实没有像 Promise&lt;Promise&lt;T&gt;&gt; 这样的东西。
猜你喜欢
  • 2020-06-22
  • 1970-01-01
  • 2019-03-04
  • 2017-06-18
  • 1970-01-01
  • 2018-11-03
  • 2018-08-19
  • 2016-09-20
  • 2021-06-05
相关资源
最近更新 更多