Node.js обещание .then () цепочка с определенной функцией - PullRequest
3 голосов
/ 08 апреля 2020

Как использовать цепочку .then() для вызова функции, объявленной в Node.js? Проблема заключается в том, что после вызова getFileType() я хочу позвонить getExif(), но возникает синтаксическая ошибка:

'use strict';

const FileType = require('file-type');
const exif = require('jpeg-exif');

const path = './alcatraz.jpg';

async function getFileType(filePath) {
    return await FileType.fromFile(filePath);
}

function getExif(filePath) {
    return new Promise((resolve, reject) => {
        exif.parse(filePath, (error, result) => {
            if(error) {
                reject(error);
            } else {
                resolve(result);
            }
        });
    });
}

getFileType(path).then((result) => {
    console.log(result);
})
# ======> problem is here <======
.then(getExif(path) {
    console.log(result);
})
.catch((error) => {
    console.error(error.message);
    process.exit(3);
});

Синтаксическая ошибка:

SyntaxError: missing ) after argument list

Ответы [ 2 ]

3 голосов
/ 08 апреля 2020

Вы должны вернуть вызов getExif(path) внутри верхнего .then, чтобы нижний .then мог его использовать:

getFileType(path).then((result) => {
    console.log(result);
    return getExif(path);
})
.then((result) => {
    console.log(result);
})
.catch((error) => {
    console.error(error.message);
    process.exit(3);
});

Переменная result в нижнем .then будет содержать результат вызова getExif. Если вам нужны значения разрешения getFileType и getExif, поскольку они не зависят друг от друга, вместо этого используйте Promise.all:

Promise.all([
  getFileType(path),
  getExif(path),
])
  .then(([fileType, exif]) => {
    // work with results
  })
  .catch((error) => {
    console.error(error.message);
    process.exit(3);
  });
0 голосов
/ 08 апреля 2020

Может быть, вы хотите сделать это, чтобы получить результат getExif.

getFileType(path)
  .then((result) => {
    console.log(result);
  })
  .then(getExif(path)
    .then(resultOfGetExif => console.log(resultOfGetExif))
  )
  .catch((error) => {
    console.error(error.message);
    process.exit(3);
  });

или просто запустить getExif

getFileType(path)
  .then((result) => {
    console.log(result);
    return result;
  })
  .then((result) => {
    getExif(path)
    console.log(result);
  })
  .catch((error) => {
    console.error(error.message);
    process.exit(3);
  });

Я надеюсь, что это полезно.

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