调用mongodb insert,在react native中从另一个类中查找函数,返回未定义

时间:2018-10-30 05:01:20

标签: mongodb react-native

这是我定义所有数据库函数的第一堂课。

import React,{Component} from 'react';

var Datastore = require('react-native-local-mongodb')
  , db = new Datastore({ filename: 'asyncStorageKey', autoload: true });


export default class RDDBManager {
    static dbmanager = null;
static getInstance() {
    if (RDDBManager.dbmanager == null) {
        RDDBManager.dbmanager = new RDDBManager();
    }

    return this.dbmanager;
}


constructor () {

}



//insert items
insertItem(item){
    var json = item.toJsonString();
    console.log("Inside insertItem ::: "+json);
    db.insert(json,function(err,newDos){
     return newDos;
    });
}

//read single item
readItem(itemId){
    db.findOne({ id: itemId }, function (err, doc) {
     return doc; 
    });
}

//read all items
readAllItems(){

    db.find({}, function (err, docs) {
        return docs;
    });



}


getModalData(modalName) {
    this.readAllItems();
}

//update
updateItem(itemId){
    db.update({ id: itemId }, { $set: { system: 'solar system' } }, { multi: true }, function (err, numReplaced) {

    });
}

//delete item
deleteItem(itemId){
    db.remove({ id: itemId }, {}, function (err, numRemoved) {
      return numRemoved;
    });
}


}

但是,当我尝试从另一个类调用这些函数时,数据是不确定的。

loadDataFromDB() {

var items = RDDBManager.getInstance().readAllItems();

console.log("Items ======>>>>>> "+items);
}

项的值是不确定的。

1 个答案:

答案 0 :(得分:0)

这是因为您做的事情不正确,您的readallitems本质上是异步的,因此您必须执行以下操作:-

//read all items
readAllItems(callback){
    db.find({}, function (err, docs) {
        callback(docs);
    });
}

用于调用这样的内容:-

loadDataFromDB() {
   RDDBManager.getInstance().readAllItems(function(items){
     console.log("Items ======>>>>>> "+items);
   });
}

或者,您也可以使用promise或Async await。

相关问题