2017-03-04 49 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)); 

会导致拒绝任何错误,所以抓代码将执行

但是,作为第一个回答正确指出的那样,没有什么异步关于代码的,这样的承诺是不是一个真正的答案