get: function (code) {
console.log('Retrieving model for code : ', code);
let database = UTILS.getDatabase('databaseName');
return database.models.modelName.find({})
.then(function (users) {
console.log(' ----------- ', users);
return users;
})
.catch(function (error) {
return '{success: "false", msg: "Error found : ' + error + '"}';
});
}
此代碼運行時沒有任何錯誤,但調用「get」的函數找不到任何記錄,而回調函數在控制檯中打印8-9條記錄。我知道這是回調函數,但我需要這個順序發生。如何依次從貓鼬中檢索數據?
我也試過用yield return yield database.models.modelName.find({})
與*
函數,但是得到{}
,一個空的對象。
請建議一種避免回調並從mongodb獲取數據的方法。
感謝Julien,但我不能使用回調,因爲調用「get」的函數具有處理從貓鼬返回對象的邏輯。
嗨Ravi,這裏是這個過程堆棧的完整流程。路徑 - >控制器 - >外觀 - >服務 - >道(我貼的代碼屬於道層獲取功能)
這看起來很典型的類型語言解決方案,但我需要這樣做。
服務層功能可以收集來自多個模型的數據並可以統一處理,所以回調過程在這裏不滿足我的要求。
我完全被卡住,感謝您的幫助:)
路由器:
app.route('/nodics/users')
.get(CONTROLLER.UserController.get)
.post(CONTROLLER.UserController.set);
控制器:
get: function (request, response, error) {
let users = FACADE.UserFacade.get();
response.json(users);
}
門面:
get: function (code) {
console.log('inside Facade call....', code);
return SERVICE.UserService.get(code);
}
服務:
get: function (code) {
console.log('inside Service call....', code);
return DAO.UserDao.get(code);
}
道法是已經存在的頂部。這是一個示例分層實現。但我只想以這種方式實施。這樣我就可以隨時在服務層的任何地方調用DAO層方法。
使用案例:
1. I want to add one item into cart, so I pass, PID, SKUID and quantity to the router, which simply pass controls to controller.
2. Controller pass it to facade and Service.
3. In service layer
1. Call another service to check if quantity is valid
2. Call DAO to load product item
3. Call another DAO to load Inventory (or use from first call)
4. Call another DAO to load price item, based on local and currency, or other parameters.
5. Finally load ORDER and add this item into it and save it
6. Return order item to facade layer
4. In Facade, apply filter to return only fields required to expose as service.
所以,如果我想要實現這個用例,從貓鼬將不利於獲取數據的回調。
所以,請建議我直接從貓鼬獲取數據的方式,而不使用回調。
可以顯示您在哪裏如何被調用'GET'功能? –
我希望看到代碼,您如何調用get,並存儲其結果 –
您是否正在獲取門面和服務中的數據,實際上它在哪裏破壞? –