Ich habe ein Problem. Ich muss zwei verschiedene SOAP-Aufrufe ausführen, um zwei Listen von Gutscheinen abzurufen, und dann diese Listen verwenden, um sie zu überprüfen und einige Aufgaben zu erledigen. Ich lege die zwei Anrufe in verschiedene Promise-Funktionen, weil ich den Job auf den Listen starten möchte, nachdem der Aufruf sein Ergebnis zurückgegeben hat. Dies ist der erste Versprechen Anruf:Pass Variablen zwischen Versprechen und Funktionen
let vouchers = function(voucherTypeList){
return new Promise(function(resolve,reject){
const categoryId = "1000";
let args = {
"tns:CategoryId": categoryId
};
var header = {
"tns:Authenticate": {
"tns:UserName": soapVoucherWsdlUsername,
"tns:Password": soapVoucherWsdlPassword
}
};
// let voucherTypeList;
voucherClient.addSoapHeader(header);
voucherClient.GetVouchers(args, function(err, result) {
console.log("DENTRO GET VOUCHERS");
if (err) {
console.log(err);
writeResponse(res, '200', err);
} else {
//++++++++++++++++++++++
//voucherTypeList is what I want to return to the main function
voucherTypeList = mapGetVoucherTypeListResponse(result);
//++++++++++++++++++++++
}
resolve("done 1");
});
});
}
Dies ist der zweite Versprechen Anruf:
let issuedVouchers = function(accountId) {
return new Promise(function (resolve, reject) {
const categoryId = "1000";
let args = {
"tns:CategoryId": categoryId,
"tns:CheckRedeem": true,
"tns:IncludeRedeemed": false,
"tns:CardId": accountId
};
var header = {
"tns:Authenticate": {
"tns:UserName": soapVoucherWsdlUsername,
"tns:Password": soapVoucherWsdlPassword
}
};
let issuedVoucherList;
voucherClient.addSoapHeader(header);
voucherClient.GetVouchers(args, function (err, result) {
console.log("DENTRO GET ISSUED VOUCHERS");
if (err) {
console.log(err);
writeResponse(res, '200', err);
} else {
//++++++++++++++++++++++
//issuedTypeList is what I want to return to the main function
issuedTypeList = mapGetVoucherTypeListResponse(result);
//++++++++++++++++++++++
}
resolve("done 2");
});
});
}
Und das ist die Hauptfunktion, mit der Strömung Versprechen:
function getAvailableVoucherTypes(req, res) {
var accountId = req.params.accountId;
vouchers(voucherTypeList).
then(issuedVouchers(accountId)).
then(function() {
//here I want to use voucherTypeList and issuedTypeList
//and do some jobs on them
console.log("OK");
});
}
Wie kann Ich mache das? Ich habe viele Lösungen versucht, aber ich bin nicht in der Lage, VoucherTypeList und ermittelteTypeList in der Hauptfunktion zu sehen.
Entschlossenheit gibt es aus einem Grund ... Was auch immer Sie übergeben, um zu lösen, wird an den dann Callback übergeben. – Salketer