【问题标题】:Async-Await function returns undefinedAsync-Await 函数返回未定义
【发布时间】:2020-02-03 16:46:23
【问题描述】:

我发现自己在内部有等待请求的异步函数中返回某个结果有些不便。我尝试了这 3 个库(“http”、“request”、“then-request”),结果始终相同。 p>

主要思想是当ajax结束时,应该返回它的结果;但相反,它返回 undefined它不尊重 async/await)。


文件:index.server.js

const PyService = require("../../../api/services/PyService/validacionCSV");

module.exports = {
    pasajeClientes: async function (matcheos) {
        let resultado = await PyService.validate(matcheos);
        return resultado;
    }
}

文件:validacionCSV.js

const request = require('then-request');

module.exports = {

    validate: async (matcheos) => {

        var response;

        await request("GET", `${process.env.API_URL}/validate`, {
            json: {
                csv: {
                    clients: "datosPersonas.csv",
                    products: "movimientos.csv"
                },
                primary_keys: {
                    clients: "ID",
                    products: "ID",
                },
                branches: {
                    products: "rama",
                },
                rules: {
                    clients: matcheos["clientes"],
                    products: matcheos["productos"],
                }
            }
        }).done((resultado) => {

            let matched = resultado.ok;
            let no_relationships = resultado.no_relationships;
            let repeated = resultado.repeated;
            let total = resultado.total;
            let type_errors = resultado.type_errors;

            response = { 
                error: false,
                message: "",
                errorConTipoDatoClientes: type_errors.clients,
                errorConTipoDatoProductos: type_errors.products,
                errorConClientesSinProductos: no_relationships.clients,
                errorConProductosSinCliente: no_relationships.productos,
                errorConClientesRepetidos: repeated.clients,
                errorConProductosRepetidos: repeated.products,
                cantClientesOk: matched.clients,
                cantProductosOk: matched.products,
                cantClientesEnArchivo: total.clients,
                cantProductosEnArchivo: total.products,
            }

            if (no_relationships.clients > 0 || no_relationships.products > 0
            ||  repeated.clients > 0 || repeated.products > 0
            ||  type_errors.clients > 0 || type_errors.products > 0
            ) {
                response.error = true;
                response.message = "Los clientes/productos importados poseen errores."
            }
            else
                response.message = "Los clientes/productos importados no poseen errores."

        });

        return response;
    }
}

【问题讨论】:

    标签: javascript node.js ajax asynchronous async-await


    【解决方案1】:

    您正在将 Promise 回调与 async/await 混合使用。使用回调时,您不能在外部定义变量,然后在回调中实例化,然后再次尝试在回调之外使用它。阅读有关 Promises 的更多信息。

    我所做的只是在回调函数中返回response

    试试这个

    const request = require('then-request');
    
    module.exports = {
    
      validate: async(matcheos) => {
    
        var response;
    
        await request("GET", `${process.env.API_URL}/validate`, {
          json: {
            csv: {
              clients: "datosPersonas.csv",
              products: "movimientos.csv"
            },
            primary_keys: {
              clients: "ID",
              products: "ID",
            },
            branches: {
              products: "rama",
            },
            rules: {
              clients: matcheos["clientes"],
              products: matcheos["productos"],
            }
          }
        }).done((resultado) => {
    
          let matched = resultado.ok;
          let no_relationships = resultado.no_relationships;
          let repeated = resultado.repeated;
          let total = resultado.total;
          let type_errors = resultado.type_errors;
    
          response = {
            error: false,
            message: "",
            errorConTipoDatoClientes: type_errors.clients,
            errorConTipoDatoProductos: type_errors.products,
            errorConClientesSinProductos: no_relationships.clients,
            errorConProductosSinCliente: no_relationships.productos,
            errorConClientesRepetidos: repeated.clients,
            errorConProductosRepetidos: repeated.products,
            cantClientesOk: matched.clients,
            cantProductosOk: matched.products,
            cantClientesEnArchivo: total.clients,
            cantProductosEnArchivo: total.products,
          }
    
          if (no_relationships.clients > 0 || no_relationships.products > 0 ||
            repeated.clients > 0 || repeated.products > 0 ||
            type_errors.clients > 0 || type_errors.products > 0
          ) {
            response.error = true;
            response.message = "Los clientes/productos importados poseen errores."
          } else
            response.message = "Los clientes/productos importados no poseen errores."
    
          return response
        });
      }
    }

    【讨论】:

      猜你喜欢
      • 2021-10-21
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2018-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-06
      相关资源
      最近更新 更多