Javascript обещает определение и использование - PullRequest
0 голосов
/ 18 мая 2018

Я действительно изо всех сил пытаюсь интегрировать обещания Javascript в мой код и был бы благодарен за некоторую помощь в этом.

У меня есть эта простая функция, которая является частью программы, которая обрабатывает создание, чтение, обновление и удалениефайлов, поэтому я решил изменить его с использования обратных вызовов на использование обещаний.

это функция удаления:

lib.delete = (dir, file, callback) => {
  /* unlink the file */
  fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
    if (!err) {
      callback(false);
    } else {
      callback(' Error deleting file');
    }
  });
};

То, как я собирался это сделать, заключалось в том, чтобы заключитьасинхронная часть в обещании:

lib.delete = (dir, file, callback) => {
  /* unlink the file */
  return new Promise((resolve, reject) => {
    fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
      if (!err) {
        resolve(false);
      } else {
        reject(err);
      }
    });
  });
});

Но все это кажется неправильным, потому что здесь я определяю обещание, но именно здесь я действительно хочу его использовать, то есть иметь дело с результатом этого с помощью .then.

Я здесь упускаю что-то простое, у меня такое чувство, что мне нужно изменить то, как я думаю о функции удаления всех ... Любая помощь будет принята.

1 Ответ

0 голосов
/ 18 мая 2018

Если вы хотите использовать Promise, вам не нужно передавать callback в эти аргументы, цель обещания: вызвать любую функцию, которую вы захотите, после разрешения / отклонения.

Например:

С обратным вызовом:

lib.delete = (dir, file, callback) => {
  /* unlink the file */
  fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
    if (!err) {
      callback(false);
    } else {
      callback(' Error deleting file');
    }
  });
};

lib.delete('./dir', 'filname.txt', function(res){
  console.log(res);
})

С обещанием

lib.delete = (dir, file) => {
  return new Promise((resolve, reject) => {
    fs.unlink(lib.baseDir + dir + '/' + file + '.json', (err) => {
      if (!err) {
        resolve(false);
      } else {
        reject(err);
      }
    });
  });
});

lib.delete('./dir', 'filname.txt')
  .then( () =>  console.log("No error i'm happy")
  .catch( (err) =>  console.log('Error', err)

then: exec при разрешении триггера

catch: exec, когда отклонение срабатывает триггер

Надеюсь, это вам поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...