Правильно ли синхронизировал код node?

Поддержка
  • Подскажите правильно ли я преобразовал код и синхронизировал с bas?

    Изначальный вид с синхронным чтением директории:

     const fs = require('fs')
     const dir = 'C://test//'
    
     function print(dir) {
         const result = fs.readdirSync(dir)
         return result
     }
     console.log('result:' + print(dir))
    

    Преобразованный код в асинхронное чтение директории и синхронизированный с bas:

          const fs = require('fs')
          const dir = 'C://test//'
     
          async function print(dir) {
              await (new Promise((resolve, reject) => {
                  fs.readdir(dir, function (err, dir) {
                      if (err) { console.log('err') }
                      [[result]] = dir
                      resolve()
                  })
              }));
     
              return [[result]]
          }
          console.log('result:' + await print(dir))
    

    чуть дополнил еще одной функции для проверки.По идее в консоль должно быть пусто,ибо фильтр не пройден.Но фильтр не сработал,и вывелось содержание папки. Что то не так..

    const fs = require('fs')
    const dir = 'C://test//'
    
    async function print(dir) {
        await (new Promise((resolve, reject) => {
            fs.readdir(dir, function (err, dir) {
                if (err) { console.log('err') }
                [[result]] = dir.filter(async (a) => (await filterTest(a)))
                resolve()
            })
        }));
        return [[result]]
    }
    console.log('result:' + await print(dir))
    
    async function filterTest(dir) {
        return false
    }
    
  • @markinaras

    const fs = require('fs')
    const dir = 'C://test//'
    
    async function print(dir) {
        return await (new Promise((resolve, reject) => {
            fs.readdir(dir, function (err, dir) {
                if (err) { console.log('err') }
                resolve(dir)
            })
        }));
    
    }
    console.log('result:' + await print(dir))
    

    Функция фильтр не работает с асинхронным калбэком, используйте обычный цикл
    и у модуля fs, есть вариант на промисах

    const fs = require('fs').promises
    const dir = 'C://test//'
    
    async function print(dir) {
        try {
            return fs.readdir(dir)
        } catch (e) {
            console.log(e)
        }
    }
    
    console.log('result:' + await print(dir))
    
  • Спасибо,все работает. Жаль,что стрелочными функциями не воспользоватся,так код компакнее)

  • @markinaras используйте стрелочные функции, кто сказал, что нельзя)