Javascript 命名函数不解析或拒绝承诺

Javascript 命名函数不解析或拒绝承诺,javascript,node.js,ecmascript-6,promise,es6-promise,Javascript,Node.js,Ecmascript 6,Promise,Es6 Promise,当我将promise的resolve/reject处理移到命名函数时,它不起作用。有人能解释一下为什么吗 作品: function getPremium(policyNumber, agentNumber) { return new Promise(function (resolve, reject) { soap.createClient(wsdl, function (error, client) { client.addSoapHeader(

当我将promise的resolve/reject处理移到命名函数时,它不起作用。有人能解释一下为什么吗

作品:

function getPremium(policyNumber, agentNumber) {
    return new Promise(function (resolve, reject) {
        soap.createClient(wsdl, function (error, client) {
            client.addSoapHeader(soapHeader());
            client[config.webMethodName](soapBody(number), (error, soapResponse) => {
                return resolve(soapResponse);
            });
        });
    });
}
不起作用:

var handleResponse = (error, soapResponse) => {
    return resolve(soapResponse);
}

function getPremium(policyNumber, agentNumber) {
    return new Promise(function (resolve, reject) {
        soap.createClient(wsdl, function (error, client) {
            client.addSoapHeader(soapHeader());
            client[config.webMethodName](soapBody(number), handleResponse);
        });
    });
}

您没有传递
resolve
reject
函数,因此,
resolve(soapResponse)将不起作用

将它们添加到参数列表中,并将它们传递到
handleResponse
函数

下面是一个使用咖喱的示例:

var handleResponse = (resolve, reject) => (error, soapResponse) => { ... }
client[config.webMethodName](soapBody(number), handleResponse(resolve, reject));

当然它不会工作,在这段代码中,
var-handleResponse=(错误,soapResponse)=>{return resolve(soapResponse);}
没有定义。当
handleResponse
被创建(解析和解释)时,它绑定到外部上下文(闭包)
HandlerResponse
不知道将来如何使用它。@dfsq-所以没有办法将回调从父函数中抽象出来进行单元测试?太好了!工作得很好。咖喱是我最喜欢的新东西。顺便说一下,如果你不使用箭头函数而不是咖喱,你可以使用
bind
。我建议你也检查一下,如果你还没有。这是javascript中最重要的概念之一。