我如何修改以下解析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;
}
}
答案 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
});
答案 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并不是真正的答案