簡體   English   中英

節點 JS:如何將 arguments 傳遞給 promise 從 promise.all 解析/拒絕?

[英]Node JS: How can I pass arguments to promise resolve/reject from promise.all?

這段代碼有效,我只需要參數傳遞方面的幫助。

目標:

在遍歷 for 循環時將 arguments 傳遞給 Promise。 pastsearch要傳遞的名稱分別是foldersubfolder 、過去搜索。 承諾被稱為p1p2

守則的作用

此代碼有效。 每個 promise 獲取一個搜索詞,在其文件中查找它,如果文件存在或不存在,則返回“是”或“非”。

Promise.all 將單行是/非打印到一個文件,並將“是”的總數打印到另一個文件。

代碼

const fs = require('fs');
const readline = require('readline')


const task_id = 1;

let folder = 1;
let subfolder = 1;
let pastsearch = 1;

const myarray = [6567, 50105, 67637, 293697];

const mylen = myarray.length;

const myfiles = ['file_1.txt', 'file_2.txt'];


fs.writeFile('/pathtomyfile/', '', function() {
  console.log('done')
})


fs.writeFile('/pathtomyfile/', '', function() {
  console.log('done')
})


const p1 = new Promise((resolve, reject) => {
  let lineCount = 0;

  let v = 0;
  let yesnon = "non";

  let readStream = readline.createInterface({
    input: fs.createReadStream('/pathtofile/round_' + task_id + '/threehundred_' + folder + '/' + subfolder + '/' + myfiles[0], 'utf8')
  });


  readStream.on("line", (line) => {
    lineCount++;

    if (line == pastsearch) {
      yesnon = "yes";

      v++;
    }

  });

  readStream.on('end', () => {
    console.log('end');
    readStream.destroy();
  });


  readStream.on("close", () =>
    resolve({
      yesnon
    })

  )
});

const p2 = new Promise((resolve, reject) => {

  let readStream = readline.createInterface({
    input: fs.createReadStream('/pathtofile/round_' + task_id + '/threehundred_' + folder + '/' + subfolder + '/' + myfiles[1], 'utf8')
  });

  let lineCount = 0;
  let v = 0;
  let yesnon = "non";

  readStream.on("line", (line) => {
    lineCount++;

    if (line == pastsearch) {
      yesnon = "yes";

      v++;
    }

  });


  readStream.on('end', () => {
    console.log('end');
    readStream.destroy();
  });


  readStream.on("close", () =>
    resolve({
      yesnon
    }))

});

for (let h = 0; h < 3; h++) {

  folder++
  subfolder++
  pastsearch = myarray[h];

  Promise.all([p1, p2]).then((results) => {

    const output = results.map(({
      yesnon
    }) => yesnon).join(' ');

    fs.appendFileSync('/pathtofile/plain_round' + task_id + '.txt', output + "\n", 'utf8');

    const output2 = results.map(({
      yesnon
    }) => yesnon);


    let count = 0;

    function countValues(array, countItem) {
      array.forEach(itm => {
        if (itm == countItem) count++;
      });

      return count;
    }
    const myresult34 = countValues(output2, "yes");


    fs.appendFileSync('/pathtofile/round' + task_id + '.txt', myresult34 + "\n", 'utf8');


  });
}

筆記:

我是 nodejs 的新手,主要是 php 的經驗,所以我在學習 stackoverflow Q/A 帖子時盡我所能寫了這篇文章。

將您的承諾包裝在 function 中,它將folder 、子文件subfolderpastsearch作為 arguments。 例如p1

const p1 = (folder, subfolder, pastsearch)  {
    return new Promise((resolve, reject) => {
        // `folder`, `subfolder` and `pastsearch` are available here
    }
}

然后在Promise.all調用p1

Promise.all([p1(folder, subfolder, pastsearch), p2]).then((results) => {

在 javascript 中,這種技術稱為閉包

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM