Ich bin ein wenig neu in Javascript, und habe eine harte Zeit mit dem asynchronen Aspekt davon. Mein Programm überprüft Werte von zwei Objekten, wobei das zweite Objekt keine wichtige Eigenschaft besitzt, die ich brauche, um die Prüfung abzuschließen. Also habe ich versprochen, diesen Wert/diese Eigenschaft (die ID) zu bekommen, und jetzt muss ich diesen ID-Wert an eine Prüffunktion übergeben. Die Prüffunktion sollte einfach ein Wahr/Falsch zurückgeben, um zu sehen, ob die ID übereinstimmt. Der Wert der Check-Funktion wird an eine andere Funktion übergeben, die dann entsprechend handelt und die Sache bei Bedarf bearbeitet. Ich kann also grundsätzlich nicht auf den Tick-Wert außerhalb seiner Klammern zugreifen. Ich habe das Code-Schnipsel eingefügt, in dem all dies geschieht, da dies alles leichter zu visualisieren ist. Kann mir jemand eine Lösung für dieses Problem anbieten? Jeder Rat würde immens helfen! Ich möchte die Modifikation des Skripts so gering wie möglich halten.Wie kann ich den Wert eines Versprechens an eine andere Funktion übergeben?
var Q = require('q');
getID = function(instance, person, callback){
var = deferred = Q.defer();
var url = 'www.blah.com';
var options = {
'url': url
};
request.get(options, function(error, response, body){
if (error) {
deferred.reject(error);
}else{
var res = body;
var obj = JSON.parse(res);
var id = obj.id;
deferred.resolve(id);
} else deferred(obj);
});
check = function(instance, thing1, thing2){
var tick = true;
getID(instance, thing2).then(function(id)){
var id_1 = thing1.id; // thing1 passed into check with ID
var id_2 = thing2.id; // thing 2 now has id attached to it
if(id_1 == id_2){
tick = true; // VALUE 1
}else{
tick = false; // VALUE 2
});
// NEED VALUE 1 OR 2 OF TICK HERE
if(thing1.name == thing2.name){
tick = true;
else{
tick = false;
}
// similar checks to name but with ADDRESS, EMAIL, PHONE NUMBER
// these properties are already appended to thing1 and thing 2 so no need to call for them
};
editThing = function(instance, thing, callback){
var checked = check(instance, thing1, thing2);
if(checked){
// edit thing
}else{
// don't edit thing
};
Ist 'getID' Funktion des' deffered' Rückkehr? Es ist nicht in Ihrem Code-Snippet. – Victory
var Q = erfordern ('q'); sollte ganz oben sein! – pokemongirl1234
Das beantwortet die Frage nicht, ob Sie das 'deferred' Objekt in' getID' zurückgeben, damit es in 'check' verwendet werden kann? – Victory