[英]How do I run one Jquery function only after the first is completely done?
[英]How to start second observable *only* after first is *completely* done in rxjs
我的印象是Observable.[prototype.]concat
确保在第二个操作开始之前完全完成了第一个操作。 但是在以下代码中:
Observable
.concat(
Observable.fromNodeCallback(rimraf)(path.resolve('./some_dir')),
Observable.fromNodeCallback(mkdir)(path.resolve('./some_dir')),
writeToSomeDir$
)
在rimraf
完成删除目录之前, mkdir
尝试(但失败)创建./some_dir
。 但是,在(抛出)最后,。/ ./some_dir
最终被删除。
为什么Observable.concat
表现出这种行为? 我如何确保第一个Observable完全完成,然后再从第二个Observable开始,而又不同步到rimraf版本?
问题是fromNodeCallback
创建了一个函数,该函数在被调用时将执行基础函数并通过Observable
返回调用结果。 本质上, Observable
返回值替代了通常必须作为函数的最后一个参数传递的节点样式回调。 但是,该函数仍然会立即被调用。
如果要延迟方法的执行,可以将它们包装起来以defer
执行,直到预订Observables
为止。
var rimrafObservable = Observable.fromNodeCallback(rimraf);
var mkdirObservable = Observable.fromNodeCallback(mkdir);
Observable
.concat(
Observable.defer(() => rimrafObservable(path.resolve('./some_dir'))),
Observable.defer(() => mkdirObservable(path.resolve('./some_dir'))),
writeToSomeDir$
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.