Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

支持 Promise 的 API 设计

  让一个异步函数返回 Promise 对象我想很多人都做过。但让一个函数允许接收一个 Promise 呢?也许现在很少有人会这么做吧?毕竟 Promise 还没普及到这种程度。但是这么做确实有意义,而且要是全套 API 都支持接收 Promise 参数的话,世界会变得非常美好!
  假如我们有这么两个函数 function getJoySync(){
  return ":joy:";
};
function getJoy(){
  return Promise.resolve(":joy:");
};
  这两个函数都做同样的事情,只是它们一个是同步的,一个是异步的。如果遇上一个不支持 Promise 的函数,我们可能就要这么用: receiveJoy(getJoySync());
getJoy().then(receiveJoy);
  虽然勉强能用,但这样实在是很蛋疼吧?如果这个函数可以直接支持 Promise 参数的话不就不用这么纠结了么?比如这样 receiveJoy(getJoy());   其实如果只考虑原生 Promise 的话实现是很容易的,根据 Promise 的「脱衣性」,我们可以直接在 receiveJoy 这个函数中使用一个 Promise.all 来搞定。 function receiveJoy(){
  Promise.all(Array.from(arguments)).then(function(args){
    console.log(args);
  });
};
  这里偷了个懒,直接用 ES6 的 Array.from 来做伪数组转换。这样在函数中添加一层 Promise.all 之后函数就可以支持 Promise 参数了,虽然定义上可能有点麻烦,但使用起来肯定是会比较方便的。
网名:
34.203.245.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^