JS:对两个API使用相同的功能:可链接同步。和承诺

时间:2016-08-19 11:08:23

标签: javascript function promise arguments api-design

问题在于,如果要在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));

fiddle

[edit]:我需要它将它应用于一堆函数(例如所有导出),并且这些函数的用户不需要导入任何其他函数。

0 个答案:

没有答案