は、それは私は1つのexecutor
機能がresolve
とreject
を持ってconstructor
に渡されたかどうかを確認しなければならない時点で立ち往生しています言えば十分引数として。JavaScriptの関数に渡される関数の引数の名前を取得するにはどうすればよいですか?
これはテストの結果です。
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);
});
私がこれまで持っているもの:
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();
}
これは私が(上記からの抜粋)しようとしたものですが、無駄に:
function ArgumentsToArray(args) {
return [].slice.apply(args);
}
console.log(ArgumentsToArray.apply(fnc));
任意の助けが理解されるであろう!
WTHは 'ArgumentsToArray'が行うはずですか?どこでも配列を扱う必要はありませんか? 'fnc()'を呼び出すときには、リゾルバ関数を引数として渡すだけです。 – Bergi