Отражение
Функция Reflect
гарантирует, что функция возвращает результат даже при возникновении ошибки.
Эта функция обертывает целевую функцию и возвращает объект либо со значением value
, либо со свойством error
.
Использование
В следующем примере показано, как можно использовать функцию отражения
.
импортировать отражение из 'async/reflection'; var fs = require ('fs'); //Функция обратного вызоваfunction print (err, res) {//Доступ к данным if (res) {if (res.value! = Undefined) {console.log (res.value); } еще {console.log (res.error); }} еще {console.log (ошибка); }}//Рабочая функцияfunction helloWorld (callback) {callback (null, "Hello World!");}//Неправильная функцияfunction readFile (callback, fileName) {done = false; попробуйте {fs.readFile (fileName, 'utf8', function (err, data) {if (err == null) {callback (null, data); done = true;} else {callback (err)}}); } catch (err) {callback (err)}}//Использование отражения var hello = reflection (helloWorld); var fileReader =lect (readFile);//Вызов функций hello (print); fileReader (print, '/educative.txt') ;
Эта программа демонстрирует поведение отразить
с ошибочным вызовом функции и правильным вызовом.
Правильная функция helloWorld
просто возвращает значение Hello World
на обратный вызов. Ошибочная функция readFile
пытается прочитать данные из несуществующего текстового файла. Когда он не может этого сделать, он вызывает обратный вызов с ошибкой.
По сути, первый параметр в обратном вызове — это ошибка, а второй — результирующее значение (если есть). Если ошибки нет, обратный вызов вызывается с null
в качестве первого аргумента, за которым следует любое значение результата перед ним. С другой стороны, если возникает ошибка, пользователи могут вызвать обратный вызов с ненулевым первым параметром.
Внутри обратного вызова первый параметр всегда null
, даже если был передан ненулевой первый параметр. Это потому, что все передается внутри объекта результата (названного как res
в функции обратного вызова этого примера). Объект результата имеет элемент error
и value
.. Элемент error
содержит значение первого аргумента в вызове обратного вызова, а элемент value
содержит второй аргумент.