首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Promise 实践

更多腾讯海量技术文章,请关注云加社区:https://cloud.tencent.com/developer

作者:何方舟

promise已经是成为我们解决回调炼狱的常用方案,而且已经得到官方标准支持,如果你刚刚开始使用Promise,本文将帮助你了解几个常见的几个Promise的使用场景

使用Promise可以让程序的可读性变得更好。如下面这样的代码:

如上面代码所示,我们可以很清楚的理解到程序执行的顺序是

得到userinfo

得到groupinfo

得到taskinfo

这样的代码在许多Promise示例中都可见,但这里有一点需要特别注意一下,

每次调用then都会返回一个新的Promise,如果then中的申明的方法没有返回一个Promise,那么会默认返回一个新的

处于fulfilled的Promise,之后添加的then中的方法都会立即执行,

如下面代码所示,如果在上面的代码中没有返回一个promise,输出的结果就变成 1 3 5 2 4 6了。

当要在使用链式Promise时,请在then传入的方法中返回一个新的Promise。

另外一个需要注意的是,resolve传递给下个then方法的值只能有一个,上面 getTaskInfo方法中是无法获取到userInfo的值,所以如果有多个值需要放在一个数据集合(Array,Object,Map,Set)中传入下个方法)。

function getTaskInfo(groupInfo,userInfo){ /* userInfo为undefined */

console.log(groupInfo); // { name : 'jdc'}

console.log(userInfo); // undefined}

原生API函数的Promise化

大部分原生的API函数并不支持Promise,还是基于回调来使用的,所以需要把一些方法Promise化,类似trunk化。

下面一个例子把原生中的定时器setTimeout ,进行Promise化。

Promise化本质上都属于一种curry化。curry化是指,把需要传递多参数的函数生成一个新的函数,如上代码 先通过执行 timer得到一个新的函数,该函数会返回一个Promise,这样就完成了Promise化。

timer(function () { console.log('1') }, 1000)

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180105A078IZ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券