#javascript #node.js
#javascript #node.js
Вопрос:
Я пытаюсь добиться чего-то похожего на методы, которые вы получаете с модулем core fs, где у вас есть асинхронный метод по умолчанию и метод синхронизации по запросу, такой как fs.readDir()
и fs.readDirSync()
;
У меня есть метод с именем fetchUrls
, который извлекает файлы из списка URL-адресов и возвращает обещание. Я хочу добавить другой метод с именем fetchUrlsSync
, который вызывает fetchUrls и блокирует поток до тех пор, пока не будет выполнено обещание. как это можно сделать?
пример кода:
fetchUrls(startDate, endDate) {
return new Promise((resolve, reject)=> {
// some async work...
})
}
fetchUrlsSync() {
// call fetchUrls and block until resolved
}
эти две функции являются методами класса.
Комментарии:
1. Зачем вам это нужно?
2. Просто как удобный, потому что многие операции после него зависят от доступности файлов, и мне также любопытно, как это можно сделать.
3. Я не уверен, что вы можете это сделать, потому что, если ввод-вывод или любая другая операция в fetchUrls является асинхронной, все, что вы можете сделать, это разрешить возвращаемое обещание с помощью .then . В противном случае лучше всего переписать fetchUrlsSync, используя sync IO или операцию синхронизации
4. Существуют удобные способы выполнения действий после завершения операции. Я бы действительно посоветовал держаться подальше от синхронных решений: это плохая практика.
5. Вы не можете и не должны. Для этого и предназначен async / await.
Ответ №1:
Это невозможно непосредственно в node.js . Это также противоречит общей модели в node, которая заключается в выполнении всех операций ввода-вывода асинхронно.
Однако возможно использовать скомпилированный Node.js вызывается расширение для достижения этой цели http-sync
.