当前位置: 首页 > 知识库问答 >
问题:

firebase.firestore()不是函数?

欧阳斌
2023-03-14
Object {
  "_nanoseconds": 725000000,
  "_seconds": 1621386976,
}
t {
  "nanoseconds": 725000000,
  "seconds": 1621386976,
}
const lastItemIndex = thoughts.length - 1;
console.log(thoughts[lastItemIndex].date_created); // <--- logs Object timestamp

const seconds = thoughts[lastItemIndex].date_created._seconds;
console.log(seconds); // <--- logs seconds

const nanoseconds = thoughts[lastItemIndex].date_created._nanoseconds;
console.log(nanoseconds); // <---- logs nanoseconds

const lastDate = Firebase.firestore().Timestamp(seconds, nanoseconds); // <--- error
console.log(lastDate);

我们在文件中导入Firebase,如下所示:

import Firebase from '../../firebase';

在firebase.js文件中:

import * as firebase from 'firebase/app';

// Optionally import the services that you want to use
import 'firebase/firestore';

我们得到的警告是:

[Unhandled promise rejection: TypeError: _firebase.default.firestore().Timestamp is not a function. (In '_firebase.default.firestore().Timestamp(seconds, nanoseconds)', '_firebase.default.firestore().Timestamp' is undefined)]
const lastDate = new Firebase.firestore.Timestamp(seconds, nanoseconds);
[Unhandled promise rejection: TypeError: undefined is not a constructor (evaluating 'new _firebase.default.firestore.Timestamp(seconds, nanoseconds)')]
// Initialize Firebase

export const Firebase = firebase.initializeApp(firebaseConfig);
export const Time_stamp = firebase.firestore.Timestamp();

// export default Firebase;

共有1个答案

穆彬郁
2023-03-14

问题在于如何导入和导出库。

如果这是从主库导入的地方,还需要确保正确导出。查看当前firebase.js文件:

import * as firebase from 'firebase/app';

// Optionally import the services that you want to use
import 'firebase/firestore';

/* ... */

// Initialize Firebase

const Firebase = firebase.initializeApp(firebaseConfig);

export default Firebase; // <- this is a firebase.app.App not firebase itself

您导出的是firebase.app.app的实例,而不是firebase(整个firebase库和命名空间)。

import * as firebase from "firebase/app";
import "firebase/firestore";

const config = { /* ... */ };

const defaultFirebaseApp = firebase.initializeApp(config);

// the instance of Firestore for the default app
const dbApp = defaultFirebaseApp.firestore();

// the instance of Firestore for the default app
const dbDefault = firebase.firestore();
// OR
// const dbDefault = firebase.firestore(dbApp);

console.log(dbApp === dbDefault); // -> true

const namedFirebaseApp = firebase.initializeApp(config, "something");

const dbNamedApp = namedFirebaseApp.firestore(); // returns instance of Firestore for the named app
// OR
// const dbNamedApp = firebase.firestore(dbNamedApp);

console.log(dbDefault === dbNamedApp); // -> false

要从Firebase.js正确导出Firebase库,您需要(也应该)使用:

import firebase from 'firebase/app';
import 'firebase/firestore';

/* ... */

// Initialize Firebase

firebase.initializeApp(firebaseConfig);

export default firebase; // re-export firebase library & namespace

通过以这种方式重新导出库,您可以以与遇到的所有代码示例相同的方式使用它:

import firebase from '../../firebase';

const {_nanoseconds, _seconds} = thoughts[lastItemIndex].date_created;
const dateCreatedAsTimestamp = new firebase.firestore.Timestamp(_nanoseconds, _seconds);

const db = firebase.firestore();

db.doc("collection/doc")
  .set({
    date_created: dateCreatedAsTimestamp
  })
  .then(
    () => console.log("success"),
    (err) => console.error("failed", err);
  );

如果您打算在firebase.js中添加一些实用函数,则导入内容的方式将略有变化

import firebase from 'firebase/app';
import 'firebase/firestore';

/* ... */

// Initialize Firebase

export const defaultApp = firebase.initializeApp(firebaseConfig);

export function castToTimestamp(timestampLikeObject) {
  const {_nanoseconds, _seconds} = timestampLikeObject;
  return new firebase.firestore.Timestamp(_nanoseconds, _seconds);
}

export default firebase; // re-export firebase library & namespace as the default
// you can import this normally like in the other example, but we'll
// include some of the other exports (like the utility function)
import firebase, { castToTimestamp } from '../../firebase';

const {_nanoseconds, _seconds} = thoughts[lastItemIndex].date_created;
const dateCreatedAsTimestamp = new firebase.firestore.Timestamp(_nanoseconds, _seconds);
// OR
// const dateCreatedAsTimestamp = castToTimestamp(thoughts[lastItemIndex].date_created);

const db = firebase.firestore();

db.doc("collection/doc")
  .set({
    date_created: dateCreatedAsTimestamp
  })
  .then(
    () => console.log("success"),
    (err) => console.error("failed", err);
  );
 类似资料:
  • 当我尝试初始化Firebase Cloud Firestore时,我遇到了以下错误: 未捕获的类型错误:webpack_imported_module_0_firebase.firestore不是函数 我以前用安装了firebase。

  • 问题内容: 当我试图在React版本15.2.0中使用这两个函数时,我在代码中发现了一个问题,尽管如此,我找到了一种解决方法,但是我想知道是否有更好的解决方案。 因此,每当我尝试运行index.html文件时,都不会显示任何内容,但是控制台会出现第一个错误: React.render不是function 。我发现发生这种情况是因为新版本的React需要使用react-dom,即 现在问题已解决,但

  • 问题内容: 我正在为无法解决的错误而烦恼。我有以下内容; JSON格式 和下面的jQuery 但是我收到一个错误,认为map.data未定义为函数?看着它,我不知道什么是行不通的,因为我已将其从以前使用的代码复制到新项目中。唯一不同的是JSON源。上一个没有[]括号之前的部分。这是什么让我失望吗? 问题答案: 对象,在JavaScript没有方法,它只是为数组,。 因此,为了使您的代码正常工作,请

  • 问题内容: 我有这段代码可用于从Arduino接收数据,但我想将数据发送回Arduino并在客户端页面上获得响应。我添加了侦听功能,但是从客户端页面发送数据时却不断获取信息。 test.js 问题答案: 您的价值不是应有的价值。 通常的做事方式是这样的: 但是我猜你的价值是这样的: 那不是同一回事。那就是模块句柄。但是,当您这样做时: 然后,是一个socket.io实例。您可以将侦听器绑定到实例,

  • 问题内容: 我正在尝试使用来运行任何按钮的功能。我在Firebug中遇到错误 document.getElementByClass不是函数 这是我的代码: 问题答案: 您可能是想(然后从结果节点列表中获取第一项): 您可能仍然会收到错误 不是功能 但是,在较旧的浏览器中,如果需要支持那些较旧的浏览器,则可以提供后备实现。

  • 编辑:阅读问题末尾的部分! 我的服务代码: 在我的组件中,我有这个提交功能: 这里和这里都有类似的错误。答案总是包含rxjs函数,但是我这样做了,所以我不太确定,为什么会出现这个错误。 编辑: 因此,实际的问题不是这个函数,而是主应用程序中我的路线前缺少“/”。js文件。解决了这个问题之后,问题就消失了。