Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何等待函数为真或某个时间在angular 2中已过_Javascript_Angular - Fatal编程技术网

Javascript 如何等待函数为真或某个时间在angular 2中已过

Javascript 如何等待函数为真或某个时间在angular 2中已过,javascript,angular,Javascript,Angular,angular 2的完全初学者,目前对此感到相当困惑 我有一个函数需要在另一个函数返回true或等待半秒钟后运行 private myFunction(details: Stuff) { if (this.okToProceed(details)) { this.doStuff(details); } } 如果不能继续,我想在100毫秒后再试一次,但如果我已经等了500毫秒,我还是想继续 我一直在摆弄setTimeout和setInterval,试图观察

angular 2的完全初学者,目前对此感到相当困惑

我有一个函数需要在另一个函数返回true或等待半秒钟后运行

private myFunction(details: Stuff) {
    if (this.okToProceed(details))
    {
        this.doStuff(details);
    }
}
如果不能继续,我想在100毫秒后再试一次,但如果我已经等了500毫秒,我还是想继续

我一直在摆弄setTimeout和setInterval,试图观察okToProceed函数,但我没有取得任何进展。

使用一些递归(在okToProceed之前使用timeout递归):

或者使用一些奇特的ES7做真正酷的异步工作(无需递归检查):

okToProceed必须回复如下承诺:

okToProceed(details){
    return Promise.resolve(true);
}

谢谢,为什么函数绑定而不是仅仅调用它呢?另外,如果okToProceed永远不是真的,ES7也不会在一段时间后爆发,对吗?@dibs 487调用它会立即执行它,这是我们不希望的。是的,如果承诺以某种方式得到解决,那么第二种情况就会继续。您可以执行setTimeout(reject,500)之类的操作,在ceetain时间之后自动拒绝
private async myFunction(details: Stuff) {
    if (await this.okToProceed(details)) {
        return this.doStuff(details);
    }
}
okToProceed(details){
    return Promise.resolve(true);
}