用户登录

Promise 就是在 JavaScript 语言里提供的一些处理异步动作的方法。比如你想异步完成一些事情,可以制造一个 Promise。就是你让应用去做一些事情,因为不能马上得到结果,所以只能先拿到一个承诺,这个承诺在未来可能会被兑现,也可能被拒绝。我们可以事先设计好当承诺兑现的时候要做什么,在承诺被拒绝以后要做什么。

清理一下文件里的内容,下面再定义一个函数,名字是 nature,用箭头函数的写法定义它。在这个函数的内部可以让它制造一个 Promise,然后返回这个 Promise, return 新建一个 Promise 。

在制造这个 Promise 的时候给它提供一个函数参数,这个函数参数可以有两个参数,resolve 还有 reject。它们两个是回调函数,成功兑现就执行 resolve() 带着结果,失败就在这个 Promise 里执行 reject() 带着错误。

在这个给 Promise 提供的函数参数的内部,可以去做一些异步的动作,比如去调取数据仓库里的数据,请求外部服务接口等等。当成功完成了这些事情以后,就可以执行一下 resolve() 这个函数,把结果交给这个 resolve() 。为了减少干扰,这里我们直接把一只 🦖 交给 resolve(),这只 🦖 就是这个 Promise 最终产生的数据。

nature() 这个函数会返回一个 Promise ,执行这个函数的时候可以这样,执行一下 nature() 接着再用一下 then() 这个方法,在 Promise 上面都可以使用这个 then() 方法。在这个函数里可以设计一下当承诺成功兑现之后要做的事情,给这个 .then() 提供一个回调参数,这个回调支持一个 data 参数,这里这个 data 就是 Promise 最终生产出来的数据,也就是在 Promise 里面,交给 resolve() 函数的值。

回到终端,执行 node dist/playground,你会发现这里输出了一只恐龙。

下面可以再模拟一下异步的动作,改造一下 nature ,在函数的一开始,先在控制台上输出三个点,然后在这个给 Promise 提供的回调里面,用一下 setTimeout ,它可以设置在规定的时间结束以后再执行指定的动作。

第一个参数是个函数,第二个参数是一个时间,可以设置成 2000,意思就是两秒钟以后,再执行前面的这个函数。可以把这个 resolve() 放在这个函数里。

这样这个 Promise 会在 2 秒钟以后生产出来一只恐龙。

在执行了 nature 函数的下面,可以在控制台上再输出一座火山。

回到终端,执行一下 dist/playground ,你会发现,在控制台上先输出了三个点,这是在 nature 函数里要做的事情,然后又输出了一座火山,这是执行 nature() 函数的后面要做的事情,两秒钟以后,又会输出一只恐龙,因为在 nature 函数里返回的 Promise,它会在两秒钟以后生产出来一只恐龙。

在执行 nature() 函数的时候,我们设置了成功兑现承诺以后要做的事情就是在控制台上输出 Promise 生产出来的数据,这里就是这只恐龙。

Promise《 Node.js 服务端应用开发:数据连接 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点