地图应用开发过程中,客户端经常需要和GIS服务器数据通讯,传统的方式是客户端发送一个请求给服务器端,然后等待服务器返回结果再做下一步的代码执行,也就是同步方式。但是现在,很多情况下是建议采用异步的方式,这样设计的好处是当任务执行时,程序还可以同时执行其他的业务逻辑(譬如我们可能需要同时执行多个服务器请求),不需要一直等待服务器端返回结果,这能提供更好的地图使用体验。目前互联网大部分的应用都采用异步方式,关于异步的好处这里就不过多阐述。这里要重点介绍的是ArcGIS API for JavaScript 4.x(简称API)关于异步操作promise的使用。
Promise字面上理解就是承诺,既然承诺了就要去执行,不管成功还是失败,都要把结果告诉对方,不能杳无音信。这个其实挺适合异步操作这种场景,客户端发送请求给服务器,客户端知道服务器把结果返回,所以它可以先去干其他的事,等结果回来了,再处理。Esri提供的这套API就是采用promise这种机制来满足上述的需求。简单来说promise有三种状态,pending, resolved, rejected。当结果执行成功时,状态为resolved,同时调用回调函数callback 来执行程序定义的代码。当执行失败的时候,状态为rejected,同时调用回调函数errback 来执行程序定义的代码,譬如告示用户友好的错误信息。Promise的常用格式如下:
譬如下面的例子:
除了上面这种方式之外,我们还可以用otherwise函数来处理请求错误的的情况:
虽然使用的方式不一样,但是作用都是一样,所以在开发的时候,团队内部订好一种作为规范即可。下面的例子点坐标投影转换,具体我们可以先看下代码:
require([
"esri/tasks/GeometryService",
"esri/tasks/support/ProjectParameters", ...
],