#javascript #node.js #promise
#javascript #node.js #обещание
Вопрос:
Я попытался передать данные ReadFile через цепочку обещаний.
Он способен читать, но когда я передаю данные чтения в WriteFile, они получают undefined и записываются в файл:
Вот результат:
node promise.js
In fileFunction:
promiseResolveCallback(): File found!
readFromFileCallback: 11111111111111111111111111111111111111111111111111111111111111111111111111111111
11111111111111111111111111111111111111111111111111111111111111111111111111111111
writeToFileCallback: undefined
Мой код:
var objFs = require( 'fs' )
function promiseResolveCallback( arg )
{
console.log("promiseResolveCallback(): ", arg)
}
function promiseRejectionCallback( arg )
{
console.log("promiseRejectionCallback(): ", arg)
throw -999;
}
function writeToFileCallback( argPromise )
{
objFs.writeFile( 'new.js',
argPromise.data,
( argError ) =>
{
if( argError )
throw argError
else
console.log( "writeToFileCallback: Written in new.js!" )
}
)
}
function readFromFileCallback()
{
return new Promise( (resolve, reject ) =>
{
objFs.readFile( 'new.js', ( argError, argData ) =>
{
if( argError )
{
reject( argError )
console.log( "readFromFileCallback: " argError )
}
else
{
resolve( "read file n")
console.log( "readFromFileCallback: " argData )
}
}
)
}
)
}
function fileFunction()
{
console.log("In fileFunction:")
return new Promise( ( resolve, reject ) =>
{
objFs.open( 'new.js',
'r',
( argError, argFD ) =>
{
if( argError )
{
reject( new Error("File not found!"), 1000);
}
else
{
resolve("File found!", 1000);
}
}
)
}
);
}
var objPromise = fileFunction()
objPromise.then( promiseResolveCallback, promiseRejectionCallback )
.then( readFromFileCallback )
.then( writeToFileCallback )
objPromise.catch( ( argError ) =>
{
console.error( argError )
}
)
Комментарии:
1. у fs уже есть API с обещанием. Подробнее nodejs.org/api/fs.html#fs_fs_promises_api .
Ответ №1:
Я совсем новичок в этой теме обещаний. Но я думаю, вам нужно решить проблему с помощью argData в readFromFileCallback.
Комментарии:
1. Это помогло. Во-вторых, я должен был использовать
argPromise
, а неargPromise.data
. Это тоже помогло. Спасибо.
Ответ №2:
Вы можете читать и записывать с помощью fs.Обещания (начиная с 10.0, доступные по умолчанию). Пример
const fs = require("fs");
async function writeInput(message) {
try {
await fs.promises.writeFile("new.txt", message, "utf8");
console.log("well done");
} catch (err) {
console.log(err);
}
}
writeInput("Put your args data here");
async function readInput() {
const secret = await fs.promises.readFile("new.txt","utf8");
console.log(secret);
}
readInput();
Вывод
well done
Put your args data here
Комментарии:
1. Спасибо. С помощью await и async это уже решено. Я хочу решить эту проблему, используя только обещания, не ожидая асинхронности.