@coze/taro-api
Version:
Official Coze Taro SDK for seamless AI integration into your applications | 扣子官方 Taro SDK,助您轻松集成 AI 能力到应用中
43 lines (42 loc) • 1.39 kB
JavaScript
import { getEnv } from '@tarojs/taro';
import { APIError } from '@coze/api';
import { Deferred } from '../helpers/async';
import { EventName } from './types';
import { EventSource as EventSourceWeapp } from './index.weapp';
import { EventSource as EventSourceTT } from './index.tt';
import { EventSource } from './index';
const ES = getEnv() === 'TT'
? EventSourceTT
: getEnv() === 'WEAPP'
? EventSourceWeapp
: EventSource;
export function sendRequest(config, result) {
result.deferred = new Deferred();
result.done = false;
const eventSource = new ES(config)
.on(EventName.Chunk, msg => {
result.messages.push(msg.data);
result.deferred?.resolve(msg.data);
result.deferred = new Deferred();
})
.on(EventName.Success, msg => {
result.done = true;
result.deferred?.resolve(msg);
})
.on(EventName.Fail, msg => {
const data = msg.data || {};
data.error = data.error || data.detail;
const error = APIError.generate(200, data, msg.errMsg, {
'x-tt-logid': data.error?.logid,
});
result.done = true;
result.error = error;
result.deferred?.reject(error);
});
if (config.signal) {
config.signal.addEventListener?.('abort', () => {
eventSource.abort();
});
}
eventSource.start();
}