错误或没有错误,我想在重试后进入订阅成功处理程序。要进行测试,请注释掉 setTimeout 行。这将使 checkforText$ 总是抛出错误。我想忽略最后的错误,仍然将编辑器返回给订阅成功处理程序。
https://codepen.io/Spankid/pen/gOgVZEE
var editor = { innerText: "" }
var editorOpened$ = of(editor) // observe editor object
function checkforText(){
return new Promise((resolve,reject) => {
console.log('checking for text',editor)
if (editor.innerText == ""){
reject('No text');
} else {
resolve(editor)
}
})
}
var checkForText$ = defer( () => from(checkforText())) // observe text on editor object
// comment out this line out to test
setTimeout( _ => { editor.innerText = 'testing' }, 2000)
editorOpened$.pipe(
switchMap(editor =>
checkForText$.pipe(
retryWhen(errors => {
console.log ('no text found... retrying')
return errors.pipe(
delay(1000),
take(3),
)
}),
)
)
).subscribe(editor => {
console.log('FINISH CHECKING', editor)
}, err => console.log('ERROR ',err))
找到文本时输出(setTimeout 未注释掉):
checking for text {innerText: ""}
no text found... retrying
checking for text {innerText: ""}
checking for text {innerText: "testing"}
FINISH CHECKING {innerText: "testing"}
找不到文本时的目标输出(注释掉 setTimeout):
checking for text {innerText: ""}
no text found... retrying
checking for text {innerText: ""}
checking for text {innerText: ""}
checking for text {innerText: ""}
FINISH CHECKING {innerText: ""}
未找到文本时的实际输出(注释掉 setTimeout):
checking for text {innerText: ""}
no text found... retrying
checking for text {innerText: ""}
checking for text {innerText: ""}
checking for text {innerText: ""}
我尝试在 retryWhen 之后添加 catchError,希望将其变成订阅成功处理程序。但它仍然没有。有任何想法吗?