UNPKG

@qiniu/miku-delivery-mp-ks

Version:

Kuaishou Mini Program SDK for Miku Delivery

84 lines (83 loc) 3.53 kB
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; import { deferedShared, shouldProxy } from '../common/index'; import { withResolved } from '../dns/common'; import { getDebug } from '../utils/debug'; import { waitTimeout } from '../utils/index'; import { MediaError, onAttached, onMediaEvent, resolveSrc } from '../common/component-utils'; const debug = getDebug('components-ks/image'); Component({ properties: { src: String, mode: { type: String, value: 'scaleToFill' }, lazyLoad: Boolean, }, data: { finalSrc: '', errorHandler(_event) { }, loadHandler(_event) { } }, methods: { resolveSrc() { var _a; return __awaiter(this, void 0, void 0, function* () { const src = (_a = this.properties.src) !== null && _a !== void 0 ? _a : ''; const { resolver, domains, logger } = yield deferedShared.promise; if (!shouldProxy(src, domains)) { this.setData({ finalSrc: src }); return; } try { yield resolveSrc(this, logger, resolver, src, (resolved) => __awaiter(this, void 0, void 0, function* () { const resolvedSrc = withResolved(src, resolved); const loaded = new Promise((resolve, reject) => { this.setData({ finalSrc: resolvedSrc, loadHandler: () => resolve(), errorHandler: (event) => { var _a; return reject(new MediaError((_a = event.detail.errMsg) !== null && _a !== void 0 ? _a : '')); } }); }); return Promise.race([ loaded, waitTimeout(8000, 'Load image') // Load image 在建立连接后还需要读取图片本身的数据,这里设置一个稍长的超时时间(相比 https://github.com/qbox/miku/issues/356 这里提到的 6s) ]); })); } catch (e) { console.warn('image fallback for:', e); this.setData({ finalSrc: src }); } }); }, proxyEvent(event) { if (event.type === 'error') { this.data.errorHandler(event); } else if (event.type === 'load') { this.data.loadHandler(event); } this.triggerEvent(event.type, event.detail); onMediaEvent(this, event); } }, lifetimes: { attached() { onAttached(this, 'image'); } }, observers: { src() { this.resolveSrc(); } } });