es6 promise 非同步方法處理

2021-08-15 08:01:33 字數 4089 閱讀 7672

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號...