【问题标题】:$q.all failing Typescript checker when one item in the input array is not a promise当输入数组中的一项不是承诺时,$q.all 失败的 Typescript 检查器
【发布时间】:2016-08-25 09:07:43
【问题描述】:

在 Typescript 中我有类似的东西:

    return this.$q.all([
        1,
        2,
        3
    ]);

我用 1,2 和 3 表示的实际代码是两个承诺和一个返回数字的函数。我还尝试了两个 Promise 和一个返回布尔值的函数。

代码如下:

    return this.$q.all([
        self.ens.getUserProfile(),
        self.getWordsOrderBy(),
        self.getPos()
    ]);

这没有通过 Typescript 检查器并给出如下消息:

'(IPromise | number)[]' 类型的参数不是 可分配给 '{ [id: string]: IPromise; 类型的参数}'。
类型 '(IPromise | 数)[]'。

有人对可能出现的问题有任何想法吗?据我了解 $q.all 将接受承诺或价值。

这是我拥有的返回值或布尔值的函数:

getWordsOrderBy = (): number => {
    this.wordsOrderBy = this.ens.getOrderBy(EnumGetOrderBy.Word)
    return 1;
}

getWordsOrderBy = (): boolean => {
    this.wordsOrderBy = this.ens.getOrderBy(EnumGetOrderBy.Word)
    return true;
}

有什么方法可以让 getWordsOrderBy 返回一个承诺,或者我可以让 $q.all 接受一个布尔值和一个承诺吗?请注意,它是一个立即返回的同步函数。

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    基于$q documentation $q.all() 接受承诺的数组或散列。这意味着您应该将值包装到 Promise 中。为此,可以使用$q.when()。它将一个可能是值或(第 3 方)then-able 承诺的对象包装到 $q 承诺中。 在您的情况下,它可能如下所示:

    return this.$q.all([
        self.ens.getUserProfile(),
        // wrap value into promise
        $q.when(self.getWordsOrderBy()),
        self.getPos()
    ]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-31
      相关资源
      最近更新 更多