亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

javascript - node中Promise也被嵌套了

瀏覽:199日期:2023-09-06 08:48:25

問題描述

1.

假如有兩個mongodb集合,一個是users,一個是posts,在posts列表中展示對應的users信息,常規(guī)異步處理嵌套太多.就使用Promise來解決,發(fā)現,promise解決時也有一個問題.

2. 解決代碼如下

//封裝查詢一條函數findOneData = function(db, colName, data) { return new Promise(function(reslove, reject) {db.collection(colName).find(data).toArray(function(err, data) { if (err) {console.log('數據查詢錯誤' + err);reject(err);return; } reslove({ db: db, data: data });}); });};db_conn() .then(function(db) {return findOneData(db, 'test', {}); }) .then(function(data) {console.log(data); });

這樣的方法是否正確?貌似是解決了,但是總感覺哪里不對,,,

問題解答

回答1:

promise不是最終解決方案也不見得比回調優(yōu)雅多少 async/await才是

回答2:

有三點,直接把上面的代碼寫在db_conn的then里面,然后返回this.在最外層統一使用catch捕捉異常。將console.log給刪了,看起來怪怪的,

回答3:

db_conn().then(db=>{return { db:db, test:’test’, data:{} }}).then(findOneData).then(r=>{ console.log(r);});

最后把你的findOneData改一下接收參數的方式,是不是好點了?

回答4:

db_conn() .then(db => findOneData(db, 'test', {})) .then(data => console.log(data));

這樣看起來是不是要順眼些?

(async function() { const db = await db_conn(); const data = await findOneData(db, 'test', {}); console.log(data);})();

這樣是不是更順眼些?

回答5:

Promise 方案是在不增加語言元素的基礎上解決異步回調的問題,所以必然存在一些局限性。

在原有的回調之上,Promise 至少會增加一層回調,所以在原回調鏈很短的情況下,比如題主的情況,只有一層,看起來用 Promise 似乎并無優(yōu)勢,這也是正常的。

如果遇到更復雜的情況,更多層次的嵌套,就能看出用 Promise 的價值了。

樓上各位都提供了很好的寫法,我就不多說了。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 俄罗斯一级毛片aaaa | 免费一级黄色录像影片 | 99久久精品费精品国产一区二区 | 久操视频免费观看 | 国内自拍 在线播放 网红 | 鸥美肥妇特级毛片视频 | 久久久精品在观看999 | 国产色啪午夜免费视频 | 精品国产高清不卡毛片 | 日本一级毛片免费完整视频2020 | 亚洲色图 激情小说 | 国产又黄又爽又色视频影视网免费 | 一级做a爱片特黄在线观看免费看 | 高清一区二区亚洲欧美日韩 | 亚洲aⅴ久久久噜噜噜噜 | 综合亚洲欧美日韩一区二区 | 我看逼逼 | 国产三级毛片 | 91婷婷射| 在线啊v| 伊人久久国产精品 | 午夜国产精品不卡在线观看 | 久久是免费只精品热在线 | 善良的翁熄日本在线观看 | 欧美一级色片 | 在线观看日韩精品 | 免费在线视频一区 | 国产成年网站v片在线观看 国产成版人视频网站免费下 | 中文字幕一区二区三区免费看 | 国产不卡视频一区二区在线观看 | 国产在线主播 | 国产一二三四五路线 | 一区二区3区免费视频 | 国产成人精品亚洲77美色 | 最新国产成人盗摄精品视频 | 成人的天堂视频一区二区三区 | 一级成人毛片免费观看 | 特级全黄大片 | 中文 国产 亚洲 喷潮 | 美女黄页视频 | 成年人黄视频在线观看 |