2017-03-04 3 views
0

Wie würde ich die folgende Funktion ändern, die HTML-Zeichenfolge analysiert, so dass es eine verzögerte Versprechen zurückgibt?Konvertieren der folgenden Funktionen zu Versprechen zurückgeben

function getProductName(html) { 
    var temp = document.createElement('div'); 
    temp.innerHTML = html; 
    var name; 
    try { 
    name = temp.querySelector('h1[itemprop*=\'name\']').textContent.trim(); 
    $log.debug('Name found: ' + name); 
    return name; 
    } 
    catch(err) { 
    return err; 
    } 
} 

Antwort

1

Sie sind nicht alles asychronous tun, wenn Sie also ein bereits Promise aufgelöst zurückkehren möchten, können Sie es als solches tun:

function getProductNameAsPromise(html) { 
    var temp = document.createElement('div'); 
    temp.innerHTML = html; 
    var name; 
    try { 
     name = temp.querySelector('h1[itemprop*=\'name\']').textContent.trim(); 
     $log.debug('Name found: ' + name); 
     return Promise.resolve(name); 
    } 
    catch(err) { 
     return Promise.reject(err); 
    } 
} 

getProductNameAsPromise(myHtml).then(function(productName) { 
    // do something with productName 
}); 

Promise.resolve Siehe Promise.reject

+0

@JaromandaX ja, aber das ist ein Fehler in der Funktion von OP und nichts mit Versprechungen zu tun. – bejado

+0

@JaromandaX true, ich kann aktualisieren, um 'Promise.reject()' einzuschließen – bejado

0

ändern getproductName wie folgt

function getProductName(html) { 
    var temp = document.createElement('div'); 
    temp.innerHTML = html; 
    var name = temp.querySelector('h1[itemprop*=\'name\']').textContent.trim(); 
    $log.debug('Name found: ' + name); 
    return name; 
} 

und verwenden es wie

Promise.resolve().then(() => getProductName('')).catch(e => console.error(e)); 

jeder Fehler wird in Ablehnung zur Folge hat, so dass der Code fängt

Aber ausführen, wie die erste Antwort zu Recht darauf hingewiesen, es gibt nichts asynchron über den Code, so Versprechungen nicht wirklich eine Antwort sind

Verwandte Themen