主題: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年初會剪面。