主题:API Modernizationjavascript
官方进行了几回API更新,使得API能在现代浏览器中发挥更好的做用。html
源代码的93%使用 TypeScript 编写前端
esri/request 如今使用原生的 FetchAPI 实现;若是不支持 FetchAPI,则使用 fetch polyfill 代替java
大多数异步方法如今支持一个 AbortSignal 类的可选参数:signal
,具体详见:Asynchronous Method Cancellationgit
使用一个 has
属性来标记是否使用原生的 Promise。当前,异步函数返回一个 Dojo 的 Promise,若是使用这个标记,那么将返回原生 Promise 对象。github
var dojoConfig = { has: { "esri-native-promise": true } }
主题:API Modernizationtypescript
官方作了一些准备工做,以消除 Dojo 模块化机制。当前版本中,模块化是使用 dojo/_base/declare
实现的,官方正在迁移到 ES模块(或者说TS模块)。json
迁移的第一步,是中止使用多重继承,并使用混合模式。见帮助文档:实现Accessorapi
官方打算在 4.15 版本默认使用原生 Promise(好像鸽了上一版本的计划),在 4.16 则彻底移除 Dojo Promise 的依赖。promise
两项改动。
如今,能够使用全局的 esriConfig 对象来设置 esri/config 属性。
<script> var esriConfig = { portalUrl: "https://myHostName.esri.com/arcgis" }; </script>
此版本默认使用原生的 Promise 对象,下一版本移除对 Dojo Promise 的支持。这意味着:
otherwise()
方法,用 catch()
代替cancel()
方法,使用 AbortController.abort() 代替always()
方法,使用下列 then()
链代替:.catch(function(error){ /* do something with the error */ }).then(function() { /* this function is always executed */ });
isFulfilled()/isResolved()/isReject()
方法了注意,原生 Promise 对 then/catch
使用的是异步,而 Dojo Promise 使用的是同步。
下一版本中,dojo的 declare
将彻底移除。
这意味着,多继承的支持,4.15是最后一版。当前版本会报一个警告信息。
在 2020 年 Esri 开发者峰会上,官方宣布了要对 JS API 进行改造,以便与现代前端框架、开发工具集成。当前加强的功能有:
has
属性中的 esri-native-promise
属性已经再也不支持(见4.12)intl.setLocale()
方法,有关这个主题的更多信息,见:Localizationdojo/_base/declare
amd-dependency
注释tsconfig.json
添加 importHelpers: ture
declare
的使用下面是一些语法对比。
/// <amd-dependency path="esri/core/tsSupport/declareExtendsHelper" name="__extends" /> /// <amd-dependency path="esri/core/tsSupport/decorateHelper" name="__decorate" /> import Accessor = require("esri/core/Accessor"); import { subclass, declared } from "esri/core/accessorSupport/decorators"; @subclass("esri.guide.Color") class Color extends declared(Accessor) { }
import Accessor = require("esri/core/Accessor"); import { subclass } from "esri/core/accessorSupport/decorators"; @subclass("esri.guide.Color") class Color extends Accessor { }
在 4.16 中已经不推荐使用 IE11 和 旧 edge 浏览器了,4.17是支持他们的最后一版。
如今这个进程还在进行中,还不能投入生产。官方打算在 4.18 发布一个beta的生产版本,在2021年初会剪面。