Javascript 命名函数不解析或拒绝承诺
当我将promise的resolve/reject处理移到命名函数时,它不起作用。有人能解释一下为什么吗 作品: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(
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中最重要的概念之一。