Как получить доступ к данным promise в redux saga

#javascript #redux #axios #saga

#javascript #redux #axios #сага

Вопрос:

Я пытаюсь получить пользовательские данные с сервера, используя redux saga. Я могу успешно получить данные, и я вижу их в консоли, но они находятся в [[PromiseResult]] . Я не могу найти какую-либо информацию о том, как получить доступ к этим данным, или если я делаю что-то не так в своей саге, из-за чего данные поступают таким образом.

сага

 function* login() {
    try {
        
        const response = yield call(fetch(`${API_URL}/api/current_user`, {
            method: 'GET',
            credentials: 'include',
        }));
        const responseBody = yield response.json();

        yield put(loginUserSuccess(responseBody));
    } catch (error) {
        let message;
        switch (error.status) {
            case 500:
                message = 'Internal Server Error';
                break;
            case 401:
                message = 'Invalid credentials';
                break;
            default:
                message = error;
        }
        yield put(loginUserFailed(message));
        // setSession(null);
    }
}
 

полезная нагрузка, которую я могу console.log

 Promise {<fulfilled>: {…}}
__proto__: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Object
{
credits: 0
date: "2020-12-21T22:23:43.461Z"
email: "test@gmail.com"
password: "$2a$10$W.GOdcdyfphcazW.9flFTeoQ4s/3khfZOv2dkyJ2Bg/gl0pIZRtHu"
plan: 1
verified: false
__v: 0
_id: "5fe1206f4a30e03194bfdf0b"
}
__proto__: Object
 

Ответ №1:

Это не так, как работает call, первый аргумент — это функция, а второй — массив аргументов, которые вы хотите передать этой функции. Должно работать следующее:

 const response = yield call(fetch, [
  `${API_URL}/api/current_user`,
  {
    method: 'GET',
    credentials: 'include',
  },
]);
const responseBody = yield call(() => response.json());