返回不停止功能

问题描述 投票:0回答:2

我有以下代码

        insertcontact(root, args) {
        var finalresult = '';
        var soap = require('soap');
        var url = 'http://192.168.100.2/setlead/webservice.asmx?wsdl';
        var soapargs = {
            contacto: args.contacto, token: args.token, PrimeiroNome: args.PrimeiroNome, Apelidos: args.Apelidos, Email: args.Email, Telefone: args.Telefone, Origem: args.Origem
        };
        soap.createClient(url, function (err, client) {
            if (err) {
                console.log(err);
                finalresult = err
                return { contacto: "error cliente" };
            }
            else {
                client.OperationDetail(args, function (err, result) {

                    console.log(result);
                    return { token: result };
                });
            }
        });
        return {
            contacto: args.contacto,
            PrimeiroNome: args.PrimeiroNome,
            token: args.token,
            Apelidos: args.Apelidos,
            Email: args.Email,
            Telefone: args.Telefone,
            Origem: args.Origem
        };
    }
}

该操作不会触发任何错误,我确实在控制台日志中收到了结果。但我没有收到该部分之后宣布的退货。该函数继续,我收到声明的最后一个返回。它不应该停止在返回结果?

node.js soap return graphql
2个回答
0
投票

这是Javascript中的经典错误。 由于其异步行为,该函数甚至在开始创建soap客户端之前将返回。

该函数实现不是很好,因为它返回params,无论客户端创建过程的结果如何。

像这样做会好得多,如果需要的话,在return语句中使用嵌入式soap args,当然没有最后一个return语句:

// ...
soap.createClient(url, function (err, client) {
  if (err) {
    console.log(err);
    finalresult = err
    return { contacto: "error cliente" };
  } else {
    client.OperationDetail(args, function (err, result) {
      console.log(result);
      return {
        token: result,
        soapargs: soapargs
      };
    });
  }
});

0
投票

像这样将您返回的对象包装在括号中

return ({
        contacto: args.contacto,
        PrimeiroNome: args.PrimeiroNome,
        token: args.token,
        Apelidos: args.Apelidos,
        Email: args.Email,
        Telefone: args.Telefone,
        Origem: args.Origem

    });
© www.soinside.com 2019 - 2024. All rights reserved.