我有一个非常基本的睡眠函数实现,可以在x毫秒之后解析一个承诺:
module.exports = (ms) => new Promise(res => setTimeout(res, ms));
然后,我需要在睡眠后在ES6有状态类组件中呈现一个React组件,但这会遗漏错误:Objects are not valid as a React child
。这个生成器实现有什么问题吗?
import sleep from './sleep';
class Dummy extends React.Component {
*renderSubComponent(arg) {
yield sleep(1000);
return (<ChildComponent {...arg} />);
}
render() {
return (
{this.props.check ? this.renderSubComponent(this.props.check).next() : null}
);
}
}
我不能使用async / await。
答案 0 :(得分:1)
基本上,你不能进行这个实现,因为生成器返回一个迭代器,如果没有编程迭代,那么什么都不会发生。
更合理的解决方案是使用组件的状态,这样你就可以将状态保持在同一个组件中,然后你可以改变它
这是组件的外观
$log = ($MyInvocation.MyCommand.Path).TrimEnd("ps1") + "log"
$handlelog = ($MyInvocation.MyCommand.Path).TrimEnd(".ps1") + "-Handle.log"
$1 = gci 'Z:\SQLBackups' | %{gci $_.fullname -Filter '*.BAK' | ? {$_.LastWriteTime -le (get-date).addhours(-22)}}
write-output "$(get-date -format g) Files will be deleted: $1" >> $log
$1 | % {remove-item $_.fullname -force -Confirm:$FALSE}
if (!!($error)) {
write-output "$(get-date -format g) Open Handles on .BAK files:" >> $handlelog
$exec = "$env:SystemRoot\system32\cmd.exe /c" + (Split-Path($MyInvocation.MyCommand.Path)) + "\handle64.exe .BAK -u -nobanner -accepteula"
Invoke-Expression -Command:$exec >> $handlelog
$error >> $log
}