Je me penche sur les promesses en construisant une version piétonne pour comprendre ce qui se passe, il suffit de dire que je suis coincé à un point où il faut vérifier si la fonction executor
a été transmise au constructor
qui a un resolve
et reject
comme arguments.Comment obtient-on le nom des arguments d'une fonction passée à une fonction en JavaScript?
Ceci provient du test.
it('gets called with two different functions (funception!), resolve and reject', function() {
var promise = new $Promise(executor); // eslint-disable-line no-unused-vars
var argsPassedIntoExecutor = executor.calls.argsFor(0);
expect(argsPassedIntoExecutor.length).toBe(2);
var resolve = argsPassedIntoExecutor[0];
var reject = argsPassedIntoExecutor[1];
expect(typeof resolve).toBe('function');
expect(typeof reject).toBe('function');
expect(resolve).not.toBe(reject);
});
Ce que j'ai jusqu'ici:
function $Promise(fnc) {
if (typeof arguments[0] !== 'function') {
throw new TypeError('Sorry argument passed to $Promise should an executor function');
}
function ArgumentsToArray(args) {
return [].slice.apply(args);
}
console.log(ArgumentsToArray.apply(fnc));
this._state = 'pending';
this._value = null;
this._internalResolve = function(data) {
if (this._state !== 'pending') return;
this._value = data;
this._state = 'fulfilled';
};
this._internalReject = function(data) {
if (this._state !== 'pending') return;
this._value = data;
this._state = 'rejected';
};
return fnc();
}
C'est ce que j'ai essayé (extrait ci-dessus), mais en vain:
function ArgumentsToArray(args) {
return [].slice.apply(args);
}
console.log(ArgumentsToArray.apply(fnc));
Toute aide sera appréciée!
WTH est-ce que 'ArgumentsToArray' est supposé faire? Vous n'avez pas à traiter avec des tableaux n'importe où? Passez simplement les fonctions du résolveur comme arguments lors de l'appel de 'fnc()'. – Bergi