如何解决如何获得发电机的价值
scenario.ts
export interface Step {
text: string;
image: string;
time: number
}
export interface IScenario {
name: string;
steps: Array<Step>;
}
Restaurant.ts
import {IScenario,Step} from './interfaces/scenario'
export default class Restaurant implements IScenario {
name: string = 'Приключение в ресторане';
steps: Array<Step> = [
{
text: 'Вы пришли в ресторан',image: 'https://sun9-3.userapi.com/55H3n5pt-TvwwdQzmpBZ9mcHURCqf85x1mXvlw/oyI4OlFu3R0.jpg',time: 2000,},{
text: 'Перед вами стоит стол',image: '',time: 5000,];
private *enumerateSteps(steps: Array<Step>): IterableIterator<Step> {
yield step;
}
start(): void {
for (const step of this.enumerateSteps(this.steps)) {
setTimeout(() => {
return console.log(step.text);
step.next();
},step.time);
}
}
}
我想在以后再进行下一步,但是出现错误:
类型“ Step”上不存在属性“ next”。
由于某些原因,我也因缺勤step
而有一个错误,但我不知道为什么。
解决方法
您根本不应该在这里使用生成器。您想要的可以通过基于回调的方法完成
start(callback?: () => void): void {
this.steps.reduceRight((next,step) => () => {
console.log(step.text);
setTimeout(next,step.time);
},() => {
console.log('All steps done');
callback?.();
})();
}
或带有承诺和async
/ await
:
async start(): Promise<void> {
for (const step of this.steps) {
console.log(step.text);
await new Promise(resolve => setTimeout(resolve,step.time));
}
console.log('All steps done');
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。