當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


JavaScript ArcGIS workers.open用法及代碼示例


基本信息

以下是所在類或對象的基本信息。

AMD: require(["esri/core/workers"], (workers) => { /* code goes here */ });

ESM: import * as workers from "@arcgis/core/core/workers";

對象: esri/core/workers

自從:用於 JavaScript 4.2 的 ArcGIS API

用法說明

workers.open函數(或屬性)的定義如下:

open (modulePath, options) {Promise<Connection>} static


打開與工作人員的連接並使用工作人員框架加載腳本。

參數:

規格:
類型說明
modulePath String

一個完全限定的 URL 到一個腳本來執行 worker 框架。

options Object
可選的

工人選項。有關對象規格,請參閱下麵的屬性。

規格:
client

Object

可選的

定義可從模塊訪問的 API 的對象。

strategy

String

可選的
默認值:分散式

指示如何加載模塊。有關可能值的列表,請參見下表。

可能的值 說明
distributed 該模塊被加載到每個可用的工作人員中。對Connection 的每次調用都將針對一個可用的工作人員。如果模塊在調用之間不維護信息(無狀態),請使用此策略。
dedicated 該模塊被加載到一個工作人員中。對Connection 的每次調用都將針對同一個工作人員。如果模塊維護來自先前調用的信息或主線程和工作線程之間的通信需要有狀態,請使用此策略。
local 該模塊被加載到主線程中。在使用工作人員框架 API 時使用此策略,同時禁用工作人員的使用。

可能的值"distributed"|"dedicated"|"local"

signal

AbortSignal

可選的

AbortSignal 允許可取消的異步作業。如果取消,promise 將被拒絕,並出現名為 AbortError 的錯誤。另見AbortController

返回:

類型 說明
Promise<Connection> 解析為 Connection 的實例。

例子:

// Set the path for the worker's AMD loader configuration
// to a folder called workersFolder.
esriConfig.workers.loaderConfig = {
 paths: {
   myWorkers: new URL("./workersFolder", document.baseURI).href
 }
};

// load myWorkers/Calculator.js in the workers framework
// and invoke its "getMaxNumber" method
workers.open(this, "myWorkers/Calculator")
  .then((connection) => {
    return connection.invoke("getMaxNumber", [0, 1, 2, 3, 4]);
  })
  .then((result) => {
    console.log(result);
  });

//*********************************************************
// module: workerFolder/Calculator.js
//*********************************************************
define([], () => {
  return {
    // this function can be invoked from the main thread
    getMaxNumber: function (number) {
      return Math.max.apply(null, numbers);
    }
  };
});
// Load workerScripts/TimeOfTheDay.js in the workers framework
// We define an API accessible from the module
workers.open("workerScripts/TimeOfTheDay", {
  client: {
    getCurrentTime: function() {
      return Date.now();
    }
  }
})
  .then((connection) => {
    return connection.invoke("timeOfTheDay");
  })
  .then((result) => {
    console.log(result);
  });

//*********************************************************
// module: workerScripts/TimeOfTheDay.js
//*********************************************************

define([], () => {

  return {
    timeOfTheDay: function(noArgs, remoteClient) {
      // call back the main thread to get the current time over there.
      return remoteClient.invoke("getCurrentTime")
        .then((time) => {
          return "The time is " + time;
        });
    }
  };
});

相關用法


注:本文由純淨天空篩選整理自arcgis.com大神的英文原創作品 workers.open。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。