问题在于,如果要在Promise中同步使用相同的函数,arguments
的使用会有所不同,因为第一个参数可能来自Promise。
是否有比我目前的解决方案更好的解决方案?
作为示例 - 截断字符串的函数:
同步:
truncate('A very long string coming from a sync. operation', 10);
异步:
Promise.resolve('A very long string coming from a network request')
.then( truncate(10) )
异步版本会使截断函数认为10
是字符串,您需要在每个函数中检查typeof
或进行欺骗。
什么可行:
Promise.resolve('A very long string coming from a network request')
.then( truncate.it(10) )
如果您之前扩展了函数原型(这不是我想要的):
Function.prototype.it = (function() {
return function() {
var args = arguments;
return function(){
Array.prototype.push.apply(arguments, args);
return this.apply(null, arguments);
}.bind(this);
};
}());
function foo(a, b, c) {
console.log('a is ' + a, ' | b is ' + b, ' | c is ' + c);
};
// LOGIC :
foo(1, 2, 3);
// SAME AS
foo.it(2, 3)(1);
// OR
foo.it(3)(1, 2);
// OR pretty useful for .then()
Promise.resolve(1).then(foo.it(2, 3));
[edit]:我需要它将它应用于一堆函数(例如所有导出),并且这些函数的用户不需要导入任何其他函数。