为什么我仍然得到承诺作为回报

时间:2020-03-14 06:18:00

标签: javascript promise fetch

大家好,对于这个愚蠢的问题感到抱歉,我正在使用javascript模块并试图组织所有内容,以便对我的jr程序员更容易使用,因为我们都是javascript新手,而不是Jquery框架编程,所以事情是:

我创建了一个模块,该模块是从名为Router的其余服务中获取数据的助手:

const BaseUrl = 'http://localhost:1128'

/**
 * 
 * Falta Mejorar la función para los siguientes escenarios:
 * 1) Que se elija la ruta desde un modulo que tenga ya prefabricadas las rutas
 * 2) Para establecer un timeout
 * 3) que pasa con los CData y el envio de archivos
 * 4) Hay que validar los casos genericos donde se envia informacion al servidor como datos de usuario contraseña y Json Token
 */

async function request(url, params, method = 'GET') {
    //los parametros que le vamos a enviar al fetch
    const options = {
        method,
        headers: {
            'Content-Type': 'application/json' // we will be sending JSON
        }
    };

    //solo para el get enviaremos los parametros por url, si es otro lo enviaremos por el body
    if (params) {
        if (method === 'GET') {
            //url += '?' + objectToQueryString(params);
            url += '/' + params;
        } else {
            options.body = JSON.stringify(params); // body should match Content-Type in headers option
        }
    }

    //esperamos a que la promesa termine para poder ejecutarlo, fetch es una promesa

    let result;
    try {
        const response = await fetch(BaseUrl + url, options);
        if (response.status !== 200) {
            result = generateErrorResponse('Ocurrió un error.', response.status);
        }
        result = await response.json(); // convertimos el resultado en json
    }
    catch (e) {
        result = generateErrorResponse(e.message, 500);
    }
    return result;
}

function generateErrorResponse(message, status) {
    return {
        codigo: 'error',
        message,
        status
    };
}

function get(url, params) {
    return request(url, params);
}

function create(url, params) {
    return request(url, params, 'POST');
}

function update(url, params) {
    return request(url, params, 'PUT');
}

function remove(url, params) {
    return request(url, params, 'DELETE');
}

//Convierte el objeto en parametros para la url (solo para el caso del get)
function objectToQueryString(obj) {
    return Object.keys(obj).map(key => key + '=' + obj[key]).join('&');
}

export default {
    get,
    create,
    update,
    remove
};

然后,我创建了另一个模块,该模块使用路由器从特定的url获取数据并从中获取Json格式的数据,该模块是这样的:

import RouterModule from './RouterModule.js'
import GetListOptions from './Helpers/HtmlHelpers.js'
const relativeUrl = "/personas"

export async function ObtenerSelectPersonasAsync(UsuarioId, htmlSelectObj) {
    try {

        const ResponseArray = await RouterModule.get(relativeUrl, UsuarioId !== 0 ? UsuarioId : null)
        const ListOptions = GetListOptions(ResponseArray, 'personaId', 'nombre', '3', htmlSelectObj)
        return ListOptions;
    }
    catch (e) {
        return {
            error: 'Error',
            status: 404

        }
    }
}

export async function ObtenerPersonas(UsuarioId) {
    try {

        const ResponseArray = await RouterModule.get(relativeUrl, UsuarioId !== 0 ? UsuarioId : null)
        return ResponseArray;
    }
    catch (e) {
        return {
            error: 'Error',
            status: 404

        }
    }
}


export default {
    ObtenerPersonas,
    ObtenerSelectPersonasAsync
}

所以最终的程序员只需要使用PersonasModule来处理数据库(这在我看来,如果我做错了,请纠正我),

因此在index.html中,他们只需要这样做:

<script type="module">
    import { ObtenerSelectPersonasAsync, ObtenerPersonas } from './JsModules/PersonasModule.js';
    let Persona = ObtenerPersonas(1) //here it's supposed to retrieve an array however im getting a promise
Persona.then(result => {
        inputNombre.value = result[0].nombre;

    })
</script>

您能告诉我为什么会这样吗,我错过了什么吗?也许我正在做一些令人讨厌的事情,还有更好的方法可以做到这一点,如果您能以正确的方式指导我,我将不胜感激,非常感谢。

0 个答案:

没有答案