promise 怎么封装成返回数据的常规方法
比如 写了一个抓取页面解析链接的代码
async function getLinksByRequest(url){
return new Promise(function(resolve, reject){
request.get(url , function(error,response,body){
if(error){
reject(error);
}else{
var links=getLinks(body);
resolve(links);
}
});
});
}
现在需要在其他地方 通过 简单的 fn=“getLinksByRequest”; fn(someurl) 这样来动态调用 因为解析不同页面是通过不同函数实现的
不管是
async function fn1(url){
var links = await getLinksByRequest(url);
console.log('await',links);
return links;
}
还是
function fn2(url){
var result;
getLinksByRequest(url).then( (links) =>{
console.log('then',links);
result=links;
});
return result;
}
最后调用
fn='fn1';
//fn='fn2';
fn(url);
在函数内部都能得到数据,函数外部返回结果都是 Promise 要取得最终数据 只能复制粘贴大段 await func(param)/promise.then 代码 如果封装好的promise 如果要在其他调用 就象 ret=func(para) 这样的简单的常规方式调用谁怎么实现
4 回复
你要是觉得连await/promise都不爽就只能用回调了,异步是改不回同步的
另外fn2返回的大概永远是undefined
异步就是异步,想要阻塞代码,可以使用execSync
await 出来的值是不能return的。 这一点都不知道吗?
https://github.com/pretty-foam/proxy/blob/master/src/proxy.js 这是之前做的爬虫,看看能否解决你的问题