Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@alicloud/fetcher-jsonp

aliyun129MIT1.5.9TypeScript support: included

fetcher 的底层 jsonp 实现,可独立使用

fetcher, jsonp, promise

readme

@alicloud/fetcher-jsonp

@alicloud/fetcher 的底层 Promise 比较「纯」的 jsonp 实现,可以单独使用,返回为封装过的 JsonResponse 而非直接的数据。

何以「纯」?

url 需要使用者来拼接参数(跟原生的 fetch 类似)。

INSTALL

tnpm i @alicloud/fetcher-jsonp -S

APIs

import jsonp, {
  EJsonpError,
  JsonpOptions
} from '@alicloud/fetcher-jsonp';

jsonp(url, {
  timeout, // 超时毫秒数,默认 5 秒(一般来说 JSONP 请求要求必须有超时时间)
  charset,
  jsonpCallback,
  jsonpCallbackFunction,
  signal // 和 fetch 一致
});

如何 abort

参考 https://javascript.info/fetch-abort https://developer.mozilla.org/en-US/docs/Web/API/AbortController

import jsonp from '@alicloud/fetcher-jsonp';

function getAbortSignal(): AbortSignal | undefined {
  if (!window.AbortController) { // IE 下都不支持,请 if 保护
    return;
  }

  const abortController = new AbortController();

  setTimeout(() => { // 这里是模拟的,实际场景中不会用 setTimeout
    abortController.abort(); // 只有第一次调用有效
  }, 200);

  return abortController.signal;
}

return jsonp(jsonpUrl, {
  signal: getAbortSignal(),
  timeout
}).then(response => response.json());

请求被 Abort 只是形式上的 Abort,就像 timeout 一样,请求最终还是会继续(即使 DOM script 已经被移除)。 Abort 后得到的错误和原生的 AbortError 类似,其 name 属性为 AbortError

changelog

CHANGELOG

1.0.0 2020/11/30 @驳是

  • 开源第一版