@qiniu/miku-delivery-mp-ks
Version:
Kuaishou Mini Program SDK for Miku Delivery
84 lines (83 loc) • 3.53 kB
JavaScript
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();
}
}
});