javascript promesse de ne pas passer tous les arguments (à l'aide de Q)
J'ai du mal à passer tous les arguments. Ma promesse de rappel reçoit un seul au lieu de trois:
var asyncFunction= function(resolve) {
setTimeout(function() {
resolve("Some string that is passed", "and another", "third");
}, 1000);
};
var promiseFunction = function () {
var deferred = Q.defer();
asyncFunction(deferred.resolve);
return deferred.promise;
};
promiseFunction().then(function() {
//Only one argument is passed here instead of 3
//{ '0': 'Some string that is passed' }
console.log(arguments);
});
Une idée de ce que je fais de mal?
mon argent est sur de contrainte de type
OriginalL'auteur Nick | 2013-07-31
Vous devez vous connecter pour publier un commentaire.
Q promesses peuvent être
resolve
d avec un seul argument - une promesse est une valeur unique, et non pas une collection d'entre eux. Les mettre dans un tableau explicitement si vous avez besoin de plusieurs valeurs. Pour le multi-paramètre-rappels, vous pouvez utiliser.écart()
.Seulement avec un wrapper, il me semble. Avez-vous un particulier, un esprit?
Je dirais qu'il y a beaucoup de valeur (ma propre promesse de la mise en œuvre permet) et passant autour
arguments
objets simplifier le code. Bien sûr,Q
a été construit avec un paradigme différent de zéro et la modification des il serait complexe à présent.Vous pouvez écrire plus concis des fonctions de rappel, sans accès à des propriétés ou des indices sur la valeur. Pensez à la tableaux de n-uplets, pas que listes. Le
$.ajax
promesses serait un bon exemple.En fait je ne vois pas l'+ interdisant les valeurs multiples - je suppose que nous aurons à discuter qu'à un certain moment, je vais ouvrir un sujet. Et même code synchrone peut renvoyer plusieurs valeurs - tandis que pas actuellement autorisés dans le JavaScript (déstructuration des affectations pourrait donner une syntaxe pour que) c'est un la fonction dans d'autres langues.
OriginalL'auteur Bergi
Synchrone fonctions renvoie une seule valeur, de la même façon asynchrone, ce qui devrait résoudre avec un.
C'est une mauvaise pratique pour créer async fonctions qui permettent de résoudre avec beaucoup de valeurs. Si vous voulez passer beaucoup de valeurs, de retour en tableau ou dict objet, de la même manière que vous le feriez si la fonction serait synchrone.
Matt, d'abord dans la bibliothèque que je maintiens, j'ai expérimenté avec de l'allocation de plusieurs valeurs pour la résolution, mais j'ai rapidement rejeté cette idée. Je ne me souviens plus exactement des questions, mais je crois qu'il y avait des cas où j'avais besoin de faire face avec la valeur résolue comme un objet, et c'était un peu bizarre (et pas sur pied d'égalité avec les fonctions de synchronisation) à toujours traiter avec un tableau ou un objet arguments. La décision est déjà inventé et s'est avérée être droit dans la pratique. Le post que vous avez lié comme vous le voyez fut rapidement réprimée. Je ne me souviens pas de cette idée d'être sérieusement pris en considération.
Je ne me préoccupe parce que je suis en train d'écrire une des promesses de la bibliothèque (pour le plaisir et l'apprentissage) et de multiples résolution des arguments se sent comme telle solution naturelle pour moi. Si la communauté est réglé sur une valeur unique, donc, je suppose. Merci pour le suivi.
ne pouvais pas être plus d'accord. Les promesses de résoudre le problème de méchant rappel de nidification encore rappels permettent encore plus d'un argument passé. Il se sent tout à fait ridicule que je ne peux pas passer plus d'un argument à
.resolve
, au lieu que j'ai pour emballer le tout dans un tableau et de le décompresser dans le rappel conduisant à un gâchis. N'était-ce pas ce qui promet était d'éviter en premier lieu, un gâchis?OriginalL'auteur Mariusz Nowak
Si vous souhaitez passer le long de plusieurs valeurs, vous devez envelopper dans un seul autre valeur que vous passez, comme un tableau ou d'un objet.
OriginalL'auteur user3661094