2017-03-04 53 views
0

如何修改以下函數來解析html字符串,以便返回延期承諾?轉換以下函數以返回承諾

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

回答

1

你什麼都沒有做臺異步的,所以如果你想返回一個已經解決了Promise,你能做到這樣:

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.resolvePromise.reject

+0

@JaromandaX好的,但這是OP功能的缺陷,與承諾無關。 – bejado

+0

@JaromandaX真的,我可以更新包括'Promise.reject()' – bejado

0

變化getproductName如下所示

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

並使用它像

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

會導致拒絕任何錯誤,所以抓代碼將執行

但是,作爲第一個回答正確指出的那樣,沒有什麼異步關於代碼的,這樣的承諾是不是一個真正的答案