转换以下函数以返回promise

时间:2017-03-04 01:27:40

标签: javascript promise

我如何修改以下解析html字符串的函数,以便它返回一个延迟的promise?

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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));

任何错误都会导致拒绝,因此catch代码将执行

但是,正如第一个答案正确指出的那样,代码没有异步,所以Promise并不是真正的答案