codecamp

Promise异步编程模型

PHP 的主要编程模式是同步方式,如果要在 PHP 中进行异步编程,通常是采用回调的方式,因为这种方式简单直接,不需要第三方库的支持,但缺点是当回调层层嵌套使用时,会严重影响程序的可读性和可维护性,因此层层回调的异步编程让人望而生畏。

回调的问题在 JavaScript 中更加明显,因为异步编程模式是 JavaScript 的主要编程模式。为了解决这个问题,JavaScript 社区提出了一套 Promise 异步编程模型。Promise/A+(中文版)是一个通用的、标准化的规范,它提供了一个可互操作的 then 方法的实现定义。Promise/A+ 规范的实现有很多,并不局限于 JavaScript 语言,它们的共同点就是都有一个标准的 then 方法,而其它的 API 则各不相同。

Hprose 2.0 为了更好的实现异步服务和异步调用,也为 PHP 提供了一套 Promise 异步模型实现。它基本上是参照 Promise/A+(中文版) 规范实现的。

Hprose 2.0 之前的版本提供了一组 Future/Completer 的 API,其中 Future 对象上也提供了then 方法,但最初是参照 Dart 语言中的 Future/Completer 设计的。

而在 Hprose 2.0 版本中,我们对 Future 的实现做了比较大的改进,现在它既兼容 Dart 的Future/Completer 使用方式,又兼容 Promise/A+ 规范,而且还增加了许多非常实用的方法。下面我们就来对这些方法做一个全面的介绍。

注意:下面的例子中,为了突出重点,代码中均省略了:

<?php
require_once "vendor/autoload.php";
请读者自行脑补。

如何在程序中引用 Hprose
使用 Future 构造器
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

第二章 异步与协程

创建 Future/Promise 对象

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }