У меня есть следующий код, который работает
if (fs.existsSync(dirName)) {
__writeFile();
return;
}
function __writeFile() {
writeIntoFile(readStream, destFileName, reject);
numOfFiles++;
}
Но после его выполнения я получаю предупреждение:
(node:3547) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
Есть идеи, как этого избежать?
обновить это весь код
yauzl.open(filePath, (err, zipFile) => {
if (err) {
__rejectAndLog(err);
return;
}
zipFile.on('entry', __processEntry.bind(null, zipFile))
.once('error', __rejectAndLog)
.once('close', () => {
resolve();
});
});
function __processEntry(zipFile, entry) {
if (//$/.test(entry.fileName)) {
return;
}
zipFile.openReadStream(entry, (err, readStream) => {
if (err) {
__rejectAndLog(err);
return;
}
//Path to drop the files
let destFileName = '/' + entry.fileName;
let dirName = path.join(res);
if (fs.existsSync(dirName)) {
__writeFile();
return;
}
mkdirp(dirName, (err) => {
if (err) {
__rejectAndLog(err);
} else {
__writeFile();
}
});
function __writeFile() {
writeIntoFile(readStream, destFileName, reject);
numOfFiles++;
}
});
}
по запросу это содержимое записи в файл
function writeIntoFile(readStream, filePath, onError) {
if (fs.existsSync(filePath)) {
fs.chmod(filePath, '777');
}
var ws = fs.createWriteStream(filePath);
ws.on('error', function (error) {
onError(error);
});
readStream.pipe(ws);
};
update2
Я пытаюсь изменить его в соответствии с ответом ниже, и он не работает (и где мне поставить режим 777)
function writeIntoFile(readStream, filePath, onError) {
if (fs.existsSync(filePath)) {
fs.chmod(filePath, 0o777, function (err) {
var ws = fs.createWriteStream(filePath);
ws.on('error', function (error) {
onError(error);
});
readStream.pipe(ws);
});
}
};
Я не вижу здесь асинхронной функции, поэтому я предполагаю, что она в вашей функции writeIntoFile. Чтобы удалить предупреждение, добавьте обратный вызов аргумента, как предлагает предупреждение.
@Evert - не могли бы вы привести пример?
@GetOffMyLawn - Я не уверен, во время отладки это происходит, когда выполняется возврат, и я перехожу к предыдущей функции (вверх)
добавьте содержимое кода этой функции в свой вопрос, чтобы мы могли его увидеть.
Где содержимое writeIntoFile?
Возможный дубликат DeprecationWarning: вызов асинхронной функции без обратного вызова устарел. - как узнать, где находится "функция:"?
@GetOffMyLawn - готово, пожалуйста, посмотрите
@Evert - пожалуйста, посмотрите мое обновление
@PatrickRoberts - как вы думаете, в этом проблема? если да, то есть решение?
@JennyM прочтите документацию, поймите, как это работает, и используйте функцию обратного вызова, чтобы дождаться фактического изменения прав доступа к файлу, прежде чем создавать поток записи.
@PatrickRoberts - я изменил его согласно вашему предложению, но он не работает, посмотрите мое обновление
@PatrickRoberts - не могли бы вы показать, что мне исправить? Я пробую что-то еще (см. мое обновление), и теперь я не вижу предупреждения, но оно не работает ..., кстати, я использую fs с bluebird promisify ...
@PatrickRoberts - Я изменил его на восьмеричный, как вы сказали, и до сих пор не вижу предупреждения :), но он перестает работать :(
«Он перестает работать» - это не описательная постановка проблемы. Есть ли ошибки? Если нет, выполняли ли вы свою программу с помощью отладчика, чтобы убедиться, что все вызывается и в правильном порядке? Если да, изменяются ли права доступа к файлам? Что сломано?
@PatrickRoberts - ошибки нет, но файл не создается, как раньше, код в моем последнем обновлении выглядит нормально? чего-то не хватает?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


вы уверены, что ошибка не в
writeIntoFile?