Output
输出是指actor生成的最终数据。当一个actor负责执行某些任务(例如进行网络请求或运行复杂计算)时,它将在完成任务后返回输出。输出代表actor工作的结果。actor只有在其状态为“done”时才会生成输出;即当它们处于最终状态时。
某些actor可能会无限期运行,不会生成任何输出。
机器actor中的输出
阅读最终状态以获取有关如何在机器actor中指定输出的更多信息。
Promise actor中的输出
当一个promise actor解析时,它可以生成输出数据。您可以在机器的.output
属性中指定这些输出数据。
import { fromPromise, createActor } from 'xstate';
const promiseLogic = fromPromise(async () => {
const response = await fetch('https://example.com');
return response.json() as { message: string };
});
const actor = createActor(promiseLogic);
actor.subscribe(snapshot => {
if (snapshot.status === 'done') {
console.log(snapshot.output.message);
}
});
actor.start();
输出与TypeScript
可以在机器设置的 .types
属性中为 output
属性指定类型:
import { setup, createActor } from 'xstate';
const machine = setup({
types: {
output: {} as { total: number }
}
}).createMachine({
// ...
output: ({ context }) => ({
total: context.items.reduce((total, item) => total + item.price, 0),
})
});
const actor = createActor(machine);
actor.subscribe(snapshot => {
if (snapshot.status === 'done') {
console.log(snapshot.output.total);
}
});
您可以使用 OutputFrom<typeof actor>
从任何 actor 中读取输出类型:
import type { OutputFrom } from 'xstate';
import { machine } from './machine';
const actor = createActor(machine);
function acceptOutput<T>(output: OutputFrom<typeof actor>) {
console.log(output.total);
}