@amg0461

Как вернуть результат неблокирующего вызова?

Имеется функция API, которая делает простую вещь: пытается открыть файл и в случае успеха возвращает его содержимое, а в случае неудачи возвращает строку "none". Как написать это с помощью промисов и async/await, я знаю. А как написать это без промисов, с обычным коллбэком? До изобретения промисов как-то ведь писали такое... Должно быть что-то типа
const api = () => {
    fs.readFile(fileName, (err, content) => {
        if (err) {
            // api должно вернуть строку "none"
        } else {
            // api должно вернуть content
        }
    })
    return    // либо "none", либо content
}

Естественно, то, что написано, работать не будет, потому что return не будет ждать завершения неблокирующего вызова и сработает сразу. Как исправить?
  • Вопрос задан
  • 159 просмотров
Решения вопроса 1
bingo347
@bingo347 Куратор тега Node.js
Crazy on performance...
Как написать это с помощью промисов и async/await, я знаю. А как написать это без промисов, с обычным коллбэком? До изобретения промисов как-то ведь писали такое...
у api тоже может быть колбэк, который можно вызвать когда будет готов результат операции
const api = (cb) => {
    fs.readFile(fileName, (err, content) => {
        if (err) {
            cb("none")
        } else {
            cb(content)
        }
    })
    // return не нужен
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы