2016-10-15 3 views
-1

У меня есть тот же вопрос, который был задан here.Назначить возвращаемое значение функции переменной

Я сделал функцию:

const rewardStayingViewersOrNewcomers =() => { 
    fetch('https://tmi.twitch.tv/group/user/instak/chatters') 
    .then(parseJSON) 
    .then(r => { 
    let chatters = r.chatters; 
    viewerKeys = Object.keys(chatters); // [mods, viewers,...] 
    let ChattersPerRole = viewerKeys.map(role => { 
     return chatters[role].map(username => ({ 
     username, role 
     })); 
    }); 
    return flattenDeep(ChattersPerRole); 
    }).catch(err => { 
    console.log(`Error in fetch: ${err}`); 
    }); 
}; 

Почему я не могу присвоить это значение возврата к моей переменной? Журнал этой переменной возвращает неопределенное значение ...

let viewersPerRole = rewardStayingViewersOrNewcomers(); 
setTimeout(() => console.log(viewersPerRole), 7000); 

Bonus вопрос, как я мог легко ждать viewersPerRole быть заполнены данными я жду из выборки? (так что мне не нужно использовать setTimeout())?

ответ

0

Прежде всего, попробуйте вернуть что-то из основной функции. Нет возврата спереди на выборку (...). Код должен выглядеть следующим образом:

const rewardStayingViewersOrNewcomers =() => { 
    return fetch('https://tmi.twitch.tv/group/user/instak/chatters') 
    .then(parseJSON) 
    .then(r => { 
    let chatters = r.chatters; 
    viewerKeys = Object.keys(chatters); // [mods, viewers,...] 
    let ChattersPerRole = viewerKeys.map(role => { 
     return chatters[role].map(username => ({ 
     username, role 
     })); 
    }); 
    return Promise.resolve(flattenDeep(ChattersPerRole)); 
    }).catch(err => { 
    console.log(`Error in fetch: ${err}`); 
    }); 
}; 

// now that you're returning a promise 
rewardStayingViewersOrNewcomers() 
    .then(viewersPerRole => console.log(viewersPerRole)) 

Если вы используете Babeljs для transpile с stage3 включена, взглянуть на асинхронном/ждут.

+0

Зачем вам _have_ возвращать перед излучением? – Kevin

+0

Вам нужно вернуть значение, которое будет результатом вызова вознагражденияStayingViewersOrNewcomers(). Если вы этого не сделаете, результат будет неопределенным. – motanelu

+0

Ну, я возвращал данные: 'return flattenDeep (ChattersPerRole);', no? – Kevin

Смежные вопросы