ES6 синтаксис. Как правильно записать?

211
13 июня 2018, 22:40

const handleFiles = () => { 
  return async handle => { 
    let result; 
    result = 'hello'; 
    return result; 
  }; 
}; 
handleFiles().then(result => console.log(result)).catch(console.log(e));

Почему не срабатывает данный скрипт?

Uncaught TypeError: handleFiles(...).then is not a function

Answer 1

Проблема в том, что handleFiles возвращает функцию, а не Promise, у которого есть метод then.

Для решению нужно либо вызвать возвращенную функцию, либо возвращать результат вызова:

const handleFiles = () => { 
  return async handle => { 
    let result; 
    result = 'hello'; 
    return result; 
  }; 
}; 
handleFiles()().then(result => console.log(result)).catch(e => console.log(e)); 
 
const handleFiles2 = () => { 
  return (async handle => { 
    let result; 
    result = 'hello'; 
    return result; 
  })(); 
}; 
handleFiles2().then(result => console.log(result)).catch(e => console.log(e));

Answer 2

Вот как будет выглядеть ваша промисифицированная функция

const handleFiles = (str) => {
  return new Promise((resolve, reject) => {
    if(str){
        let result = str;
        resolve(result);
    } else {
        reject('Укажите аргумент');
    }
  });
};

В resolve передаете аргумент для then, а в reject аргумент для catch

Реализация:

handleFiles('1').then(result => console.log(result)).catch(e => console.log(e));
Answer 3

let handleFiles = new Promise((resolve, reject) => { 
    let result; 
    result = 'hello'; 
    resolve(result); 
    if (false) { 
      reject('error'); 
    } 
}); 
 
handleFiles.then(result => console.log(result), error => console.log(eror));

READ ALSO
Запуск web приложения на Tomcat 8.5 [закрыт]

Запуск web приложения на Tomcat 8.5 [закрыт]

Не запускается веб приложение на локальной машинеЗакидывал war в webapps, распаковывал в ROOT - одно и то же

258
MS SQL Server работа с jdbc driver > Не удалось выполнить вход

MS SQL Server работа с jdbc driver > Не удалось выполнить вход

пытаюсь подключиться к бд используя MS SQL Server как субдСкачал и поставил драйвер, добавил его в проект

201
Android RecyclerView и Picasso

Android RecyclerView и Picasso

Есть RecyclerView с публикациями (в вью этих публикаций есть ImageView)Например загрузил из инета 100 публикаций и для каждой с помощью Picasso библоиотеки...

291
Time, TimerTask java

Time, TimerTask java

Есть метод set() который задает значение enum - STARTEDКак сделать так, чтобы через определенное время duration значение enum задалось как FINISHED

194