Workbox - NetworkOnly 执行,即使我 return false
Workbox - NetworkOnly executes even if I return false
使用 Workbox,我正在尝试处理 graphql。
有人知道为什么我从 NetworkOnly
收到这条错误消息吗?我在路由匹配器中返回 false
,所以我不知道为什么 new NetworkOnly()
还在执行。这仅发生在离线模式下(无可用网络)。
The strategy could not generate a response for ... The underlying error is TypeError: Failed to fetch.
at NetworkOnly._handle (webpack://service-workers/./node_modules/workbox-strategies/NetworkOnly.js?:101:19)
at async NetworkOnly._getResponse (webpack://service-workers/./node_modules/workbox-strategies/Strategy.js?:155:24)
const bgSyncPlugin = new BackgroundSyncPlugin('myQueueName', {
maxRetentionTime: 24 * 60
});
const isGraphqlSubmitForm = async(event) => {
const clonedRequest = event.request.clone();
const body = await clonedRequest.json();
if (body?.operationName === 'submitForm') {
return true;
}
return false; // I MADE SURE THIS IS BEING RETURNED
};
registerRoute(
isGraphqlSubmitForm,
new NetworkOnly({
plugins: [bgSyncPlugin]
}),
'POST'
);
很抱歉,您看到这种行为是因为 truthiness of the return value from this function 用于确定路由是否匹配,并且 async
函数始终 returns a Promise
,这是一个“真实”值。
如果您处于 Workbox 的开发模式,log message 会发出警告。
如果您可以在要匹配的请求中添加 header,那可能是同步触发路由的最简单方法,因为任何尝试访问请求 body 需要 async
。如果做不到这一点,最简洁的方法就是将所有 GraphQL 请求与给定路由匹配,然后在该路由的处理程序内部,使用您需要的任何 async
逻辑来针对不同类型的流量触发不同的策略。
使用 Workbox,我正在尝试处理 graphql。
有人知道为什么我从 NetworkOnly
收到这条错误消息吗?我在路由匹配器中返回 false
,所以我不知道为什么 new NetworkOnly()
还在执行。这仅发生在离线模式下(无可用网络)。
The strategy could not generate a response for ... The underlying error is TypeError: Failed to fetch.
at NetworkOnly._handle (webpack://service-workers/./node_modules/workbox-strategies/NetworkOnly.js?:101:19) at async NetworkOnly._getResponse (webpack://service-workers/./node_modules/workbox-strategies/Strategy.js?:155:24)
const bgSyncPlugin = new BackgroundSyncPlugin('myQueueName', {
maxRetentionTime: 24 * 60
});
const isGraphqlSubmitForm = async(event) => {
const clonedRequest = event.request.clone();
const body = await clonedRequest.json();
if (body?.operationName === 'submitForm') {
return true;
}
return false; // I MADE SURE THIS IS BEING RETURNED
};
registerRoute(
isGraphqlSubmitForm,
new NetworkOnly({
plugins: [bgSyncPlugin]
}),
'POST'
);
很抱歉,您看到这种行为是因为 truthiness of the return value from this function 用于确定路由是否匹配,并且 async
函数始终 returns a Promise
,这是一个“真实”值。
如果您处于 Workbox 的开发模式,log message 会发出警告。
如果您可以在要匹配的请求中添加 header,那可能是同步触发路由的最简单方法,因为任何尝试访问请求 body 需要 async
。如果做不到这一点,最简洁的方法就是将所有 GraphQL 请求与给定路由匹配,然后在该路由的处理程序内部,使用您需要的任何 async
逻辑来针对不同类型的流量触发不同的策略。