Mongoose與bluebird結合使用實例


  nodejs的所有調用幾乎是全異步的,而所有的IO操作也都是通過回調函數才能知道結果。 如果一個異步調用依賴另一個異步調用,如果沒有Promise的話,有可能陷入傳說中的回調地獄。  

  bluebird實現了將異步回調寫法轉變為鏈式寫法,並且擴展出了catch、finally、bind等api,如catch可以幫我們集中處理每次查詢的error。

  網上找到的有關promise和bluebird的資料基本都是講原理和理論,本文介紹的是bluebird實際使用例子。實操中,我們只用將需要使用鏈式的類和方法進行promisify就行,代碼如下:

//引入數據庫操作模塊
var mongodb = require("./db")
    Promise = require("bluebird")
    ;

var mongoose = require("mongoose");

var Schema = mongoose.Schema;

//聲明User Schema結構
var userSchema = new Schema({
    user_id: String,
    password: {type: String, default: ""},
    nickname: {type: String, default: ""},
    introduction: {type: String, default: ""},
    age: {type: String, default: ""},
    gender: {type: String, default: ""},
  
});


//將User類給予接口
var User = mongoose.model('User', userSchema);

//promise化user類及其方法
Promise.promisifyAll(User);
Promise.promisifyAll(User.prototype);

module.exports = User;

另外,下文用到的Room Schema也需要做上面的處理

使用方式如下:

Room.findOne({type:'pano'})
        // .exec()
        .then(function (room) {
            console.log('rooms:',room)
       //這里不再用回調的方式返回查詢結果,而是將查詢結果傳遞到下一個.then
return User.findOne({_id:room.creator}); }) .then(function (user) { console.log('user接收上一個.then傳遞的變量:',user) }) .catch(function (e) { //處理error }) .finally(function () { //最終執行代碼 })

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM