我有一个 TypeScript 函数,它删除 Firebase 数据库中的“路径”。它返回一个 Promise ,然后解析为一个布尔标志,指示内容是否真正存在于首位(也就是说,如果它不存在,则无需删除)。
该函数如下所示:
export function remove(path: string): Promise<boolean> {
return exists(path)
.then(existance => {
return existance
? getRef(path).remove()
.then(() => Promise.resolve(true))
: Promise.resolve(false);
})
.catch((err: any) => {
console.log(`There was an error trying to remove the path "${path}": `, err);
return Promise.reject(err);
});
}
但是,这会导致以下错误消息(请注意,消息中的差异取决于我悬停在表达式中的位置):
如果有人对这个exists()
函数感兴趣——顺便说一句,TypeScript 没有问题——它是:
export function exists(path: string): Promise<boolean> {
return getRecord(path)
.then(snap => snap.val()
? Promise.resolve(true)
: Promise.resolve(false)
)
.catch(Promise.reject);
}
无论如何,我不知道为什么我会收到这些错误,并且很想知道任何人可能拥有的任何见解。
ps 我使用的是 TypeScript 2.2.2
更新:正如评论中指出的那样......这些错误似乎只在使用流行的 Bluebird 承诺库时发生
目前有一些不太直观的方法可以让 Bluebird 承诺覆盖 TypeScript 提供的全局 Promise。这个问题在这里讨论:
简而言之,我的问题更多是在某些情况下使用 Bluebird Promises 而在其他情况下使用原生 Promises 的影响。要强制使用 Bluebird,一个可行的解决方案是:
/src/[xxxx].js
import * as Bluebird from './bluebird';
/src/bluebird.js
declare module 'bluebird-global' {
import * as Bluebird from 'bluebird';
global { export interface Promise<T> extends Bluebird<T> {} }
}
通过这种方式,您应该始终获得 Bluebird 承诺,并且将避免我遇到的错误。
更新......更好的解决方案。包括@types/bluebird-global
模块,你就完成了!
注意:如果在您的
tsconfig.js
文件中使用“types”参数(大多数不使用),则将bluebird-global添加到该部分:
types: [
"bluebird-global"
]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句