2016-09-30 9 views
2

Я стучал голову на столе, за последние несколько минут здесь из-за этот запрос API ...Саги и принесите обещание

У меня есть следующий код:

Saga:

export function * registerFlow() { 
    while (true) { 
    const request = yield take(authTypes.SIGNUP_REQUEST) 
    console.log('authSaga request', request) 
    let response = yield call(authApi.register, request.payload) 
    console.log('authSaga response', response) 
    if (response.error) { 
     return yield put({ type: authTypes.SIGNUP_FAILURE, response }) 
    } 

    yield put({ type: authTypes.SIGNUP_SUCCESS, response }) 
    } 
} 

запрос API:

// Inject fetch polyfill if fetch is unsuported 
if (!window.fetch) { const fetch = require('whatwg-fetch') } 

const authApi = { 
    register (userData) { 
    fetch(`http://localhost/api/auth/local/register`, { 
     method : 'POST', 
     headers : { 
     'Accept'  : 'application/json', 
     'Content-Type' : 'application/json' 
     }, 
     body : JSON.stringify({ 
     name  : userData.name, 
     email  : userData.email, 
     password : userData.password 
     }) 
    }) 
    .then(statusHelper) 
    .then(response => response.json()) 
    .catch(error => error) 
    .then(data => data) 
    } 
} 

function statusHelper (response) { 
    if (response.status >= 200 && response.status < 300) { 
    return Promise.resolve(response) 
    } else { 
    return Promise.reject(new Error(response.statusText)) 
    } 
} 

export default authApi 

запрос API делает возвращение действительный объект однако возврат из вызова Saga всегда не определено. Может ли кто-нибудь направить меня туда, где я ошибаюсь?

Заранее благодарен!

С наилучшими пожеланиями,

Bruno

+0

Что такое '.catch (ошибка => ошибка). Then (data => data)'? Вы действительно должны опустить их (особенно «catch», который превращает каждое отклонение в выполнение) – Bergi

+0

Где именно вы получаете 'undefined'? – Bergi

+0

Я получаю undefined внутри саги, точнее, console.log ('authSaga', response) –

ответ

4

Вы забыли return обещания от вашей функции. Сделать это

const authApi = { 
    register (userData) { 
    return fetch(`http://localhost/api/auth/local/register`, { 
// ^^^^^^ 
     method : 'POST', 
     headers : { 
     'Accept'  : 'application/json', 
     'Content-Type' : 'application/json' 
     }, 
     body : JSON.stringify({ 
     name  : userData.name, 
     email  : userData.email, 
     password : userData.password 
     }) 
    }) 
    .then(statusHelper) 
    .then(response => response.json()); 
    } 
}; 
+0

Да, это была проблема! Большое вам спасибо! –

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

  • Нет связанных вопросов^_^