Не могу получить значение от обещания до редуктора - PullRequest
1 голос
/ 08 октября 2019

Я новичок в Promises и Async / Await, я хочу получить массив пользователей из mongoDB, но когда я его получаю, я получаю его как обещание и хочу использовать его в своем редукторе. Как я могу это сделать. Вот мой код:

import {combineReducers} from 'redux'
import {stitchClient} from '../pages/const'
import {RemoteMongoClient} from 'mongodb-stitch-browser-sdk';
import {DataBase} from '../pages/const';

const mongodb = stitchClient.getServiceClient(
  RemoteMongoClient.factory,
  "mongodb-atlas"
);
const db=mongodb.db(DataBase);
const collection= db.collection('User');

async function fetch(){

    return (
        collection.find().toArray()
        .then(items => {
        console.log(`Successfully found ${items.length} documents.`);
        localStorage.setItem('DataTable',JSON.stringify(items));
        return items;
        })
        .catch(err => console.error(`Failed to find documents: ${err}`))
    )
}

async function GetDataFromFetch(){
    return await fetch();
}

const AllUsersReducer=()=>{
    console.log('My Data',GetDataFromFetch());
    return (GetDataFromFetch())
};

export default combineReducers({
    AllUsers:AllUsersReducer,
});

А вот и журнал: Консольный журнал

1 Ответ

0 голосов
/ 08 октября 2019

Вам необходимо использовать async / await в AllUsersReducer

const AllUsersReducer = async () => {
    const fetchData = await GetDataFromFetch()
    console.log('My Data', fetchData);
    return fetchData
}; 

GetDataFromFetch - асинхронно, что означает, что его результат будет Promise. Чтобы получить результат от этого Promise, вам нужно использовать await.

...