| 55 | } |
| 56 | |
| 57 | function readText(text) { |
| 58 | const record = textCache.get(text); |
| 59 | if (record !== undefined) { |
| 60 | switch (record.status) { |
| 61 | case 'pending': |
| 62 | Scheduler.log(`Suspend! [${text}]`); |
| 63 | return use(record.value); |
| 64 | case 'rejected': |
| 65 | throw record.value; |
| 66 | case 'resolved': |
| 67 | return record.value; |
| 68 | } |
| 69 | } else { |
| 70 | Scheduler.log(`Suspend! [${text}]`); |
| 71 | let resolve; |
| 72 | const promise = new Promise(_resolve => { |
| 73 | resolve = _resolve; |
| 74 | }); |
| 75 | |
| 76 | const newRecord = { |
| 77 | status: 'pending', |
| 78 | value: promise, |
| 79 | resolve, |
| 80 | }; |
| 81 | textCache.set(text, newRecord); |
| 82 | |
| 83 | return use(promise); |
| 84 | } |
| 85 | } |
| 86 | |
| 87 | function Text({text}) { |
| 88 | Scheduler.log(text); |