promise 怎么封装成返回数据的常规方法
发布于 5 年前 作者 yakczh 5335 次浏览 来自 问答

比如 写了一个抓取页面解析链接的代码

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 这是之前做的爬虫,看看能否解决你的问题

回到顶部