Мне нужна функция, которая берет 2 имени файла, читает их и возвращает diff.Вот что я написал, но он возвращает логическое значение по мере необходимости.
const fs = require('fs')
const util = require('util')
const readFile = util.promisify(fs.readFile)
const access = util.promisify(fs.access)
/**
* if exists, read the file (async)
* @param {*} fileName
* @returns Promise that if resolved will produce file contents
*/
async function
verifyAndRead (fileName) {
let _txt = null
try {
await access(fileName)
.then(() => readFile(fileName))
.then((txt) => _txt = txt.toString())
}
catch (e) {
console.error(`verifyAndRead(): ${e.stack}`)
}
// console.log(`foo(): ${_txt}`)
return _txt
}
async function
match (file1, file2) {
// logger.trace(`match ('${file1}', '${file2}')`)
let a = await verifyAndRead(f1)
let b = await verifyAndRead(f2)
return a === b
}
В match () разрешены и a, и b.т.е. console.log () печатает содержимое файла (ов), чтобы они были доступны, поэтому инструкция return должна возвращать diff (true / false), но возвращает Promise.Зачем?Мне нужен логическийЭта функция является частью API / модуля, который будет использоваться другими пользователями для разработки тестовых случаев / сценариев и которые в первую очередь не являются разработчиками javascript, поэтому мне нужно сделать все проще для них.Типичное использование этого было бы
if (match(<expected_output>, <current_output>)) {
logger.log('Test passed.')
}
, и я хотел бы избежать того, чтобы тестировщикам приходилось использовать в своих скриптах «await» или «then ()» и т. Д.
Поскольку a === b
возвращает Обещание, я также попытался заменить
return a === b
на
let c = await (() => {
a === b
})()
return c
в надежде получить логическое значение, но это тоже не помогло.
После многих попыток, похоже, что единственный способ сделать это - прочитать файлы синхронно и выполнить различие, но я бы хотел сделать это с Node.js как можно больше.
Кто-нибудь знает, если / как это можно сделать асинхронно?Я что-то упустил?