国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

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

javascript - node異步問題

瀏覽:108日期:2023-09-24 15:28:01

問題描述

想要callback在findById之后執行,但又不能放在它的回調中,不然會執行多次。應該怎么辦?

javascript - node異步問題

問題解答

回答1:

軟件是服務行業,要有服務意識……代碼貼圖沒問題,可以看得很清晰,但是如果回答者想改你的代碼,還得重新敲一遍…………

我看你已經用了 es6 的語法,所以正解肯定是 Promise,可以自己封裝成 Promies

exports.findList = function(findObj, callback) { Info.find(findObj, function(err, info) {const promises = info.map(f => new Promise((resolve, reject) => { f.image = f.images.split(',')[0]; User.findById(f.author_id, function(error, user) {if (error) { reject(error); return;}f.author_name = user.name;f.authro_avatar = user.avatar;resolve(f); });}));Promise.all(promises) .then(function(values) {// 成功的時候,這個 values 是所有 info 對象,// 作為一個數組返回出來,而不是某一個callback(null, values); }) .catch(function(error) {// 注意這里 error 是第一個失敗 error// 不是所有的 error callback(error); }); });};

當然也可以用 Bluebird 提供的工具函數來封裝 Promise

需要注意的是你這里運行了好多個異步調用,所以要一起返回的話,肯定也是好多個結果。所以注意 Promise.all 后面 then() 中的回調。

如果你要用 es5,建議你寫成 es6 再 Babel。不過 Node 7.6+ 已經支持 es2017 的一些特性,所以其實不必在意這個問題。如果確實需要,就采用在 findById 回調中記數的辦法,記滿放大招(調用 callback)。

回答2:

方案一

使用 async/await。這樣就可以按照同步方式使用 User.findById。

方案二

在循環中把 User.findById 加入一個數組,然后用 Promise.all,callback 寫在 Promise.all().then() 中。

方案三

使用一個狀態變量,每次檢查一下,滿足條件再執行 callback。丑陋的方法,不要用。

回答3:

設置個參數,執行完設置下,以后每次進入回調判斷下 ..

回答4:

對于callback地獄,請使用Promise 或者類似類庫。

回答5:

exports.findList=function (findObj,callback) { Info.find(findObj,function (err,info) {for(let i in info){ info[i].image=info[i].images.split(’,’)[0]; User.findById(info[i].author_id,function (error,user) {info[i].author_name=user.name;info[i].author_avatar=user.avatar;if(i==info.length-1){ callback(err,info);} })} })}

我的解決方法,有點low。。?

回答6:

二樓說得對,用promise解決。

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 萌白酱粉嫩jk福利视频在线观看 | 欧洲国产伦久久久久久久 | 亚洲精品国精品久久99热 | 日韩一区国产二区欧美三区 | 国产精品成人在线播放 | vr欧美乱强伦xxxxx | 99re66热这里只有精品免费观看 | 香蕉依依精品视频在线播放 | 一级无毛片 | 91伊人影院 | 久久综合成人网 | 播播网手机在线播放 | 黄色美女在线观看 | 2022麻豆福利午夜久久 | 欧美另类在线观看 | 亚洲a级片在线观看 | 久久精品久久久久 | 一区二区网站 | 国产网址在线观看 | 国产午夜三区视频在线 | 欧美视频一区二区在线观看 | 亚洲国产精品久久久久久 | 精品国产91久久久久久久a | 亚洲在线视频播放 | 在线三级网址 | 亚洲欧美一区二区久久 | 成人片网址| 亚洲欧洲日韩在线 | 中国a级黄色片 | 做爰成人五级在线视频| 国产欧美日韩综合精品一区二区三区 | 久久免费视频观看 | 看真人视频a级毛片 | 国产成人精品日本亚洲专 | 另类专区另类专区亚洲 | 国产乱码精品一区二区三区卡 | 精品亚洲永久免费精品 | 全部免费毛片在线 | 午夜精品影院 | 日本欧美片| 久久精品国产免费看久久精品 |