2016-09-30 47 views
2

我一直在敲打桌子上我的頭在最後幾分鐘在這裏,由於該API的請求......傳奇故事,並獲取承諾

我有以下代碼:

城:

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請求,並返回一個有效的對象但是從佐賀調用返回總是未定義的。任何人都可以引導我到哪裏我錯了?

在此先感謝!

最好的問候,

布魯諾

+0

'.catch(error => error).then(data => data)''有什麼好處?你真的應該省略它們(特別是將每次拒絕轉化爲履行的'catch') – Bergi

+0

你究竟在哪裏得到'undefined'? – Bergi

+0

我在傳奇內部得到了undefined,更具體地說,是console.log('authSaga',迴應) –

回答

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

是的,這是問題所在! 非常感謝! –