1.在js中,凡是涉及到非記憶體的操作都為非同步操作。如讀寫磁碟檔案,訪問url請求,讀寫資料庫資料等都為非同步操作。
2.在es6之前我們最常見對於非同步的處理就是書寫大量的callback函式,所以當你的下一步資料需要依賴於上一步非同步操作的資料時,會出現很多巢狀,**凌亂的感覺。這種後果就是你不會知道你的callback是在哪,並且如果報錯也很難處理.這是我以前寫的**.
exports.get_charge_info = function (userid, orderno, callback)
var sql = "select * from game_db.t_users_rechange_record where userid = and orderno = '';";
sql = sql.format(userid, orderno);
console.log("查詢語句是:" + sql);
query(sql, function (err, rows, fields) else
callback(rows[0]);
} });
};
3.在es6裡面,為我們提供了乙個promise類.你可以理解為乙個物件,包含進行態和完成態兩部分。其中完成態分為失敗態和成功態。我們可以把處理完的資料,若成功則放在成功態,失敗則放在失敗態。具體包裝如下:
* @version 1.0 get promise請求包裝
* */
static async get() ).then((response) => ).catch((err) => );});
}
4. async 和 await 是搭配在一起使用的. 如果不寫await則不會等待非同步操作。
5.多條請求併發 可用promise.all解決,回來的結果會是乙個陣列,若其中乙個請求失敗,則不會返回任何資料,如下:
promise.all([axios.get(), axios.get()])
.then(() => ).catch((err) => );
6.mongodb 包裝處理** 第一段是對資料庫操作的處理,第二段是怎樣連線資料庫,實現了連線池。
/**
* @version 1.0 mongodb 管理
* */
const path = require('path');
const mongoclient = require('./mongoclient.js').mongoclientmannage;
const objectid = require('mongodb').objectid;
const log = require(path.join(__dirname, '../', '../', 'lib', 'log.js')).log;
class mongodbutil )
resolve(result);
});});}
return false;
}/**
* @version 1.0 查詢文件
* @param collection 文件名
* @param searchstr 搜尋條件
* @param fields 指定字段返回
* @return result 搜尋結果/false為未查找到
*/static async finddoc( })
}} else }}
dbcollection.find(searchstr, fields).toarray(
(err, result) =>
resolve(result);});
});
}return false;
}/**
* @version 1.0 聚合查詢
*/static async querydoc()
dbcollection.aggregate(searchstr).toarray(
(err, result) =>
resolve(result);});
});
}return false;
}/***
* @version 1.0 根據條件來進行統計
* */
static async countdocs( })
dbcollection.count(searchstr,
(err, result) =>
resolve(result);});
});
}return false;
}/**
* @version 1.0 更新文件
* @param collection 文件名
* @param searchstr 搜尋條件
* @param updatestr 更新條件
* @return flag true為更新成功 false 為未更新成功
*/static async updatedoc()
dbcollection.update(searchstr, updatestr, (err, result) =>
if (result.result.n > 0) );
} else );}}
);});
}return false;
}/**
* @version 1.0 刪除文件
* @param collection 文件名
* @param searchstr 需刪除的條件名
* @return flag true為成功 false為失敗
* */
static async deletedoc()
if (result.result.n > 0) );
} else );}}
);});
}return false;
}}// mongoclient.createconn().then(
// () => , ];
// // m.insertdoc();
// //查詢操作示例
// // let searchstr = ;
// // m.finddoc();
// //更新操作示例 !!請注意 $set 若不寫則為直接覆蓋
// // let searchstr = ;
// // m.updatedoc( } });
// //刪除操作示例
// // let searchstr = ;
// // m.deletedoc();
// }
// );
module.exports = ;
/**
* @version 1.0 建立客戶端
* */
const path = require('path');
const mongoclient = require('mongodb').mongoclient;
const logger = require(path.join(__dirname,'../','../','lib','log.js')).log;
let mongodbconn = ;
/** * @version 1.0 mongoclient 客戶端管理
* */
class mongoclientmannage ,
auto_reconnect: true
},replset: {},
mongos: {}
}, (err, db) => else
});}
);mongodbconn.push(res);}}
/*** @version 1.0 返回乙個可用的mongo資料庫連線
* */
static getcoon() else
}}module.exports = ;
ES6 Promise物件then方法鏈式呼叫
then 方法的作用是promise例項新增解決 fulfillment 和拒絕 rejection 狀態的 函式。then 方法會返回乙個新的promise例項,所以then 方法後面可以繼續跟另乙個then 方法進行鏈式呼叫。let p new promise resolve,reject p....
《深入理解ES6》 Promise非同步程式設計
每個promise都會經歷乙個短暫的生命週期 先是處於進行中 pending 的狀態,此時操作尚未完成,所以它也是未處理 unsettled 的 一旦非同步操作執行結束,promise則變為已處理 settled 的狀態。已處理的狀態又分為以下兩種 所有promise都有then 方法,它接受兩個引...
ES6 promise 等待多個非同步函式全部完成
等待多個非同步函式全部執行完成的函式建立不同於順序執行。function fn1 起跑。settimeout function 到達終點 console.log 1號開啟了門 door demo 3000 function fn2 起跑。settimeout 到達了終點 console.log 2號...