Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 未定义服务人员承诺.then_Javascript_Promise_Es6 Promise_Service Worker - Fatal编程技术网

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();
}