Обещание JavaScript, вложенные функции - PullRequest
0 голосов
/ 05 сентября 2018

Мой вопрос заключается в том, что я использую node.js, и у меня есть 2 функции, которые должны быть запущены в определенном порядке, однако они не возвращают обещание при этом. Поэтому мне интересно, как бы я переписал это, чтобы убедиться, что функция main будет возвращать обещание, и если у меня есть вложенные функции, могу ли я просто запустить 2-ю функцию из разрешения 1-й функции?

Вот код:

handleMd5Convert = (file) => {
  fs.readFile(file, (err, buf) => {
    fs.rename(file, directoryPath + md5(buf) + '.mp3', (err) => {
      if (err) console.log('ERROR: ' + err);
    })
  })
})

HandleMd5Convert должен быть в состоянии. then()

/ Alex

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Вы должны быть в состоянии обернуть все это в new Promise() и использовать resolve() & reject() для обработки успеха и ошибок:

handleMd5Convert = (file) => {
  return new Promise((resolve, reject) => {
    fs.readFile(file, (err, buf) => {
      if (err) return reject(err)
      fs.rename(file, directoryPath + md5(buf) + '.mp3', (err) => {
        if (err) return reject(err);
        resolve()
      })
    })
  })
}

handleMd5Convert('test.txt')
.then(() => console.log("done"))
.catch(err => console.log("error:", err))
0 голосов
/ 05 сентября 2018

Вы можете создать обещание, используя new Promise, например:

var myPromise = function(resolve) {
    someAsyncMethod(param1, callback(x){
        resolve (x);
    });
}

Таким образом, myPromise может .then(). Обещание будет выполнено только после того, как вы позвоните resolve()

myPromise.then(function(result){
    // Your code here...
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...