[英]Node JS: How can I pass arguments to promise resolve/reject from promise.all?
這段代碼有效,我只需要參數傳遞方面的幫助。
目標:
在遍歷 for 循環時將 arguments 傳遞給 Promise。 pastsearch
要傳遞的名稱分別是folder
、 subfolder
、過去搜索。 承諾被稱為p1
和p2
守則的作用
此代碼有效。 每個 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
、子文件subfolder
和pastsearch
作為 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.