Javascript 未定义服务人员承诺.then
我有以下代码:Javascript 未定义服务人员承诺.then,javascript,promise,es6-promise,service-worker,Javascript,Promise,Es6 Promise,Service Worker,我有以下代码: self.addEventListener('fetch', function(event) { const promiseChain = doSomethingAsync() .then(() => doSomethingAsyncThatReturnsAURL(event)) .then(someUrl => fetch(someUrl)); event.respondWith(promiseChain); }); 它总是给我这个错误:
self.addEventListener('fetch', function(event) {
const promiseChain = doSomethingAsync()
.then(() => doSomethingAsyncThatReturnsAURL(event))
.then(someUrl => fetch(someUrl));
event.respondWith(promiseChain);
});
它总是给我这个错误:
未捕获的TypeError:无法读取未定义的属性“then”
它在这条线上拾取它:
。然后(()=>dosomethingasyncthattreturnsaurl(事件))
供参考:
以下是dosomethingasyncthattreturnsaurl函数:
function doSomethingAsyncThatReturnsAURL(event) {
var location = self.location;
console.log("loc", location)
self.clients.matchAll({includeUncontrolled: true}).then(clients => {
for (const client of clients) {
const clientUrl = new URL(client.url);
console.log("SO", clientUrl);
if(clientUrl.searchParams.get("url") != undefined && clientUrl.searchParams.get("url") != '') {
location = client.url;
}
}
console.log("loc2", location)
var url = new URL(location).searchParams.get('url').toString();
console.log(event.request.hostname);
var toRequest = event.request.url;
console.log("Req:", toRequest);
var parser2 = new URL(location);
var parser3 = new URL(url);
var parser = new URL(toRequest);
console.log("if",parser.host,parser2.host,parser.host === parser2.host);
if(parser.host === parser2.host) {
toRequest = toRequest.replace('https://booligoosh.github.io',parser3.protocol + '//' + parser3.host);
console.log("ifdone",toRequest);
}
console.log("toRequest:",toRequest);
var finalResult = 'https://cors-anywhere.herokuapp.com/' + toRequest;
return finalResult;
});
}
以及doSomethingAsync函数:
function doSomethingAsync() {
console.log("ASYNC LOL");
}
“无法读取未定义的'then'属性”告诉您,doSomethingAsync()
调用不会返回具有then
属性的对象。我想说的是,doSomethingAsync
必须返回。Promise对象在其原型()上有then
方法,因此您可以调用它。试试这个
function doSomethingAsync() {
return new Promise(resolve => {
console.log("ASYNC LOL");
resolve();
})
}
或者只是
function doSomethingAsync() {
console.log("ASYNC LOL");
return Promise.resolve();
}
“无法读取未定义的'then'属性”告诉您,doSomethingAsync()
调用不会返回具有then
属性的对象。我想说的是,doSomethingAsync
必须返回。Promise对象在其原型()上有then
方法,因此您可以调用它。试试这个
function doSomethingAsync() {
return new Promise(resolve => {
console.log("ASYNC LOL");
resolve();
})
}
或者只是
function doSomethingAsync() {
console.log("ASYNC LOL");
return Promise.resolve();
}