我希望根据其值来延迟一个observable。例如:
class MainWindowController: NSWindowController {
@IBOutlet weak var textField: NSTextField!
@IBOutlet weak var speakButton: NSButton!
@IBOutlet weak var stopButton: NSButton!
let speechSynth = NSSpeechSynthesizer()
override var windowNibName: NSNib.Name? {
return NSNib.Name("MainWindowController")
}
override func windowDidLoad() {
super.windowDidLoad()
}
// MARK: - Action methods
@IBAction func speakIt(sender: NSButton) {
//Get tuype-in text as a strin
let string = textField.stringValue
if string.isEmpty {
print("string from \(textField) is empty")
} else {
speechSynth.startSpeaking(string)
}
}
@IBAction func stopIt(sender: NSButton) {
speechSynth.stopSpeaking()
}
}
当of(someBool).pipe(delay(1000))
为假时跳过延迟,但等到它为真时等待。
答案 0 :(得分:4)
您可以使用of(someBool).pipe(
delayWhen(val => val ? interval(1000) : of(undefined))
)
:
empty()
旁注,根据使用of()
代替openpyxl
的文档,恕我直言会有效,但似乎没有。我相信这可能是一个错误。我有reported it。
答案 1 :(得分:0)
对我来说,不清楚该问题的上下文。但我想举一个例子。假设您正在实现一个登录系统,并且想等到获得一些令牌以将其放入另一个Observable或Cookies中。然后,您可以等待Observable的值(someBool
,但在我的情况下为this.authService.isLoggedIn
)。因此,正如IngoBürk所说,您可以执行以下操作:
return this.authService.isLoggedIn
.pipe(
delayWhen(loggedIn => loggedIn ? interval(0) : interval(10000)),
);
当isLoggedIn
的状态更改时,用户将登录。