2017-05-28 7 views
0

Ich versuche IndexedDB an ein Versprechen anzupassen, aber die Funktion checkUrlLink gibt keinen Wert zurück. Wie kann ich dieses Versprechen reparieren?Das Versprechen löst nicht auf und gibt den erwarteten Wert nicht zurück:

Dies ist mein Code:

var promise = new Promise(function(resolve) { 
     return checkUrlLink(send_to_url, event); 
    }).then(function(url_link) { 
     console.log('URL LINK in promisse' + url_link); 
     return clients.openWindow(url_link); 
    }); 


function checkUrlLink(send_to_url, event) { 

    return new Promise((resolve,reject) => { 

    var request = indexedDB.open('db', 1); 
    var original_event = event; 

    request.onsuccess = function (event) { 
     //db = event.target.result; 
     var url_link = "url_link"; 
     var store = request.result.transaction("uid", "readwrite").objectStore("uid"); 
     var getRequest = store.get(url_link); 

     getRequest.onsuccess = function() { 
     var result = getRequest.result; 
     if (result) { 
      url_link = result; 
      //send_to_url(original_event,url_link); 
      resolve(url_link); 
     } else { 
      url_link_value = self.registration.scope; 
      store.add(url_link_value, url_link); 
      //send_to_url(original_event, url_link_value); 
      resolve(url_link_value); 
     } 
     }; 
    }; 

    request.onupgradeneeded = function (event) { 
     var db = event.target.result; 
     var store = db.createObjectStore('url_link'); 
    }; 



    }); 



} 

ich diese Arbeiter in einem Dienst ausgeführt wird.

+2

Ihre ersten lösen wird Versprechen löst niemals auf, weil Sie niemals Ihr erstes Versprechen lösen - Versprechen sind nicht Majick: p - 'aber die Funktion checkUrlLink gibt keinen Wert zurück - ja, es gibt ein Versprechen zurück –

+1

' checkUrlLink' gibt eine Promise-Instanz zurück, die sein muss aufgelöst. Es gibt keinen Wert zurück. – pacifier21

+3

try - 'var promise = checkUrlLink (send_to_url, event) .then (funktion (url_link) { console.log ('URL LINK in promisse' + url_link); zurück clients.openWindow (url_link); };' –

Antwort

2

Sie verwenden ein Versprechen Konstruktor anti-Muster hier

var promise = new Promise(function(resolve) { 
    return checkUrlLink(send_to_url, event); 
}).then(function(url_link) { 
    console.log('URL LINK in promisse' + url_link); 
    return clients.openWindow(url_link); 
}); 

das heißt eine Funktion sind Einwickeln, die ein Versprechen in einem new Promise gibt - es gibt keine Notwendigkeit dafür. Sie jedoch nie entweder auflösen nennen, das ist also zwei Probleme mit diesem Code

Der obige Code ist einfach

var promise = checkUrlLink(send_to_url, event) 
.then(function(url_link) { 
    console.log('URL LINK in promisse' + url_link); 
    return clients.openWindow(url_link); 
}; 

jetzt versprechen, ist ein Versprechen, das auf den Wert zurück von clients.openWindow(url_link);

Verwandte Themen