第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

nodejs中怎么循環(huán)執(zhí)行一個(gè)異步的方法呢?

nodejs中怎么循環(huán)執(zhí)行一個(gè)異步的方法呢?

慕勒3428872 2019-03-29 22:19:46
perPageFiles = filenames.slice(articleIndex, articleIndex + perPage);perPageFiles.forEach(function(filename, index) {  fs.readFile(fileDirectory + filename + '.md', 'utf-8', function(err, data) {    if (err) throw err;    perPageDatas[index].articleContent = data.split('<!--more-->')[0];    if (index === perPageFiles.length - 1) {      result.count = totalArticles;      result.data = perPageDatas;      result.ret = true;      res.send(result);    }  });});這個(gè)是我程序中的一段代碼,目的是利用readFile函數(shù)循環(huán)讀取文件,但是測(cè)試發(fā)現(xiàn)有時(shí)候讀取的數(shù)據(jù)會(huì)丟失,查了下資料貌似是因?yàn)檫@個(gè)方法是異步的,不能直接這樣循環(huán)么,這個(gè)能用promise或者async來(lái)處理么。。
查看完整描述

3 回答

?
一只甜甜圈

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊

你的問(wèn)題在于, 你用index === perPageFiles.length - 1判斷任務(wù)已經(jīng)執(zhí)行完畢, 但這個(gè)判斷只能說(shuō)明最后一個(gè)發(fā)起的readFile已經(jīng)結(jié)束, 因?yàn)楫惒降年P(guān)系, 最后一個(gè)發(fā)起的readFile并不一定是最后一個(gè)結(jié)束的, 這并不能說(shuō)明所有的readFile已經(jīng)執(zhí)行完畢.


可以作如下修改, 用額外的計(jì)數(shù)器


perPageFiles = filenames.slice(articleIndex, articleIndex + perPage);

let completedCount = 0;

perPageFiles.forEach(function(filename, index) {

  fs.readFile(fileDirectory + filename + '.md', 'utf-8', function(err, data) {

    if (err) throw err;

    perPageDatas[index].articleContent = data.split('<!--more-->')[0];

    completedCount++;

    if (completedCount === perPageFiles.length) {

      result.count = totalArticles;

      result.data = perPageDatas;

      result.ret = true;

      res.send(result);

    }

  });

});


查看完整回答
反對(duì) 回復(fù) 2019-04-09
?
隔江千里

TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超10個(gè)贊

這個(gè)能用promise或者async來(lái)處理么

可以,但是本來(lái)就提供了同步API的readFileSync。


查看完整回答
反對(duì) 回復(fù) 2019-04-09
?
MM們

TA貢獻(xiàn)1886條經(jīng)驗(yàn) 獲得超2個(gè)贊

一般來(lái)說(shuō)讀取文件最好是使用異步讀取,對(duì)于題主這個(gè)簡(jiǎn)單的需求來(lái)說(shuō),不妨將讀取文件這一步包裝為promise ,遍歷需求路徑下的所有文件路徑,調(diào)用之前的包裝函數(shù)將返回promise都放到一個(gè)數(shù)組里面,然后在使用promise.all方法同時(shí)讀取所有的文件。


查看完整回答
反對(duì) 回復(fù) 2019-04-09
  • 3 回答
  • 0 關(guān)注
  • 663 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)