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



这是我定义所有db函数的第一个类。

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);
}

items的值未定义。

这是因为你做得不对,你的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。

最新更新