国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

javascript - node中Promise也被嵌套了
世界只因有你
世界只因有你 2017-06-05 11:11:11
0
5
867

1.

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

2. 解決程式碼如下

//封裝查詢一條函數(shù)
findOneData = function(db, colName, data) {
    return new Promise(function(reslove, reject) {
        db.collection(colName).find(data).toArray(function(err, data) {
            if (err) {
                console.log("數(shù)據(jù)查詢錯(cuò)誤" + err);
                reject(err);
                return;
            }
            reslove({ db: db, data: data });
        });
    });
};

db_conn()
    .then(function(db) {
        return findOneData(db, "test", {});
    })
    .then(function(data) {
        console.log(data);
    });

這樣的方法是否正確?貌似是解決了,但是總感覺哪裡不對(duì),,,,

世界只因有你
世界只因有你

全部回覆(5)
洪濤

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

滿天的星座

有三點(diǎn),直接把上面的程式碼寫在db_conn的then裡面,然後回傳this.
在最外層統(tǒng)一使用catch捕捉異常。
將console.log給刪了,看起來怪怪的,

我想大聲告訴你
db_conn()
.then(db=>{
        return {
               db:db,
               test:'test',
               data:{}
         }
})
.then(findOneData)
.then(r=>{
   console.log(r);
});

最後把你的findOneData改一下接收參數(shù)的方式,是不是好點(diǎn)了?

PHPzhong
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);
})();

這樣是不是更順眼?

迷茫

Promise 方案是在不增加語言元素的基礎(chǔ)上解決非同步回調(diào)的問題,所以必然存在一些限制。

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

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

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

最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板