在 observable 中取消 fetch 方法
cancelling fetch method within an observable
我想在取消订阅returned observable
时取消fetch方法
所以我为什么要 return ()=>controller.abort()
为什么这个方法在我取消订阅时调用()
createHttp(url: string) {
return new Observable((observer) => {
const controller = new AbortController()
const signal = controller.signal
fetch(url, { signal })
.then((response) => response.json())
.then((body) => {
observer.next(body);
observer.complete();
})
.catch((error) => {
observer.error(error);
});
return ()=>controller.abort()
});
}
如果我只是 return 它没有那样的 es6 函数
return controller.abort()
如果我只是订阅()它会取消获取方法
Observable 的return 值需要是订阅者取消订阅时 Observable 可以调用的函数的引用。使用 return controller.abort()
,您不是 return 对中止函数的引用,而是调用中止函数并 return 其 return 值。另一方面,使用 return () => controller.abort()
,你不是在调用函数,你是在 returnObservable 可以在取消订阅时调用的函数本身。
考虑以下示例:
let sayHello = () => "Hello"
function exampleOne() {
// return reference to sayHello function.
return sayHello;
}
// vs
function exampleTwo() {
// call sayHello function and return its value ("Hello").
return sayHello();
}
编辑
此修改基于以下评论。
以下是创建 Observable 的框架:
new Observable((observer) => {
// Invoked on subscribe.
return () => {
// Invoked on unsubscribe.
}
});
我想在取消订阅returned observable
时取消fetch方法所以我为什么要 return ()=>controller.abort()
为什么这个方法在我取消订阅时调用()
createHttp(url: string) {
return new Observable((observer) => {
const controller = new AbortController()
const signal = controller.signal
fetch(url, { signal })
.then((response) => response.json())
.then((body) => {
observer.next(body);
observer.complete();
})
.catch((error) => {
observer.error(error);
});
return ()=>controller.abort()
});
}
如果我只是 return 它没有那样的 es6 函数
return controller.abort()
如果我只是订阅()它会取消获取方法
Observable 的return 值需要是订阅者取消订阅时 Observable 可以调用的函数的引用。使用 return controller.abort()
,您不是 return 对中止函数的引用,而是调用中止函数并 return 其 return 值。另一方面,使用 return () => controller.abort()
,你不是在调用函数,你是在 returnObservable 可以在取消订阅时调用的函数本身。
考虑以下示例:
let sayHello = () => "Hello"
function exampleOne() {
// return reference to sayHello function.
return sayHello;
}
// vs
function exampleTwo() {
// call sayHello function and return its value ("Hello").
return sayHello();
}
编辑
此修改基于以下评论。
以下是创建 Observable 的框架:
new Observable((observer) => {
// Invoked on subscribe.
return () => {
// Invoked on unsubscribe.
}
});