色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

javascript - node異步問(wèn)題

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

問(wèn)題描述

想要callback在findById之后執(zhí)行,但又不能放在它的回調(diào)中,不然會(huì)執(zhí)行多次。應(yīng)該怎么辦?

javascript - node異步問(wèn)題

問(wèn)題解答

回答1:

軟件是服務(wù)行業(yè),要有服務(wù)意識(shí)……代碼貼圖沒(méi)問(wèn)題,可以看得很清晰,但是如果回答者想改你的代碼,還得重新敲一遍…………

我看你已經(jīng)用了 es6 的語(yǔ)法,所以正解肯定是 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) {// 成功的時(shí)候,這個(gè) values 是所有 info 對(duì)象,// 作為一個(gè)數(shù)組返回出來(lái),而不是某一個(gè)callback(null, values); }) .catch(function(error) {// 注意這里 error 是第一個(gè)失敗 error// 不是所有的 error callback(error); }); });};

當(dāng)然也可以用 Bluebird 提供的工具函數(shù)來(lái)封裝 Promise

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

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

回答2:

方案一

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

方案二

在循環(huán)中把 User.findById 加入一個(gè)數(shù)組,然后用 Promise.all,callback 寫在 Promise.all().then() 中。

方案三

使用一個(gè)狀態(tài)變量,每次檢查一下,滿足條件再執(zhí)行 callback。丑陋的方法,不要用。

回答3:

設(shè)置個(gè)參數(shù),執(zhí)行完設(shè)置下,以后每次進(jìn)入回調(diào)判斷下 ..

回答4:

對(duì)于callback地獄,請(qǐng)使用Promise 或者類似類庫(kù)。

回答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);} })} })}

我的解決方法,有點(diǎn)low。。?

回答6:

二樓說(shuō)得對(duì),用promise解決。

標(biāo)簽: JavaScript
相關(guān)文章:
主站蜘蛛池模板: 亚洲视频在线免费 | 日本欧美一区二区三区片 | 亚洲免费网站在线观看 | 中文字幕精品在线 | 国产精品久草 | 三级黄色片网站 | 亚州色吧 | 亚洲天堂资源网 | 精品九九久久 | 欧美日韩一区二区三区免费 | 日本国产一区二区三区 | 和老外3p爽粗大免费视频 | 国产亚洲精品一区二区在线观看 | 一区二区三区在线观看视频 | 国产欧美日韩综合二区三区 | 全免费a级毛片免费看不卡 全免费毛片在线播放 | 日本免费在线视频 | 一级片视频免费观看 | 114一级毛片免费 | 成年视频国产免费观看 | 日本一级爽毛片在线看 | 狠狠色丁香婷婷久久综合不卡 | 一a一片一级一片啪啪 | 喷潮白浆 | 欧美日韩在线视频不卡一区二区三区 | 毛片在线看免费 | 久久一二 | 国产大陆精品另类xxxx | 99国产在线视频 | 欧美成人免费 | 手机看成人免费大片 | 久久欧美精品欧美久久欧美 | 国产精品手机在线亚洲 | 亚洲一区在线视频观看 | 亚洲男人的天堂成人 | 99re热这里只有精品视频 | 成人午夜影院 | 亚洲www在线 | 欧美视频自拍偷拍 | 成人午夜在线观看国产 | 久久99国产乱子伦精品免费 |