返回不停止功能

时间:2017-11-27 22:37:43

标签: node.js soap return graphql

我有以下代码

        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
        };
    }
}

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

1 个答案:

答案 0 :(得分: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
      };
    });
  }
});