javascript - Node.js http.get的返回结果,怎么传到外面?
伊谢尔伦
伊谢尔伦 2017-04-11 09:21:19
[JavaScript讨论组]
function requestOrderAPI(name,floor){

    let re = ''; 
    let url = 'http://此处省略/reservations/plus1?name=' + qs.escape(name) +'&location='+floor;
    
    http.get(url,(res)=>{
        res.setEncoding('utf8');
        let rawData = '';
        res.on('data', (chunk) => rawData += chunk);
        res.on('end', () => {
            re = rawData;
        });
    });

    return name + ':' + re;//异步的原因拿不到re的值
}

我想让requestOrderAPI(name,floor)这个函数返回re。有什么好的办法吗?应该怎么做哪?

伊谢尔伦
伊谢尔伦

小伙看你根骨奇佳,潜力无限,来学PHP伐。

全部回复(3)
高洛峰

同步思维转异步的问题。。。
如果代码写成这样你就能看明白了


function requestOrderAPI(name,floor){

    let re = ''; 
    let url = 'http://此处省略/reservations/plus1?name=' + qs.escape(name) +'&location='+floor;
    
    return new Promise(function(resolve, reject) {
        http.get(url,(res)=>{
            res.setEncoding('utf8');
            let rawData = '';
            res.on('data', (chunk) => rawData += chunk);
            res.on('end', () => {
                resolve(re);
            });
        });
    });
};

async function test () {
    let re = await requestOrderAPI(name, floor);
    console.log(name + ' ' + re);
}

test();

javascript部分中大部分方法都是异步回调的方法,你想要的功能只能通过callback去实现。或者通过一些promise, co, async/await之类的方式去优化一下异步回调,但是本质上他依然是一个异步回调。这个是解决不了的。这个是语言特性。

黄舟
function requestOrderAPI(name,floor,callback){

    let re = ''; 
    let url = 'http://此处省略/reservations/plus1?name=' + qs.escape(name) +'&location='+floor;
    
    http.get(url,(res)=>{
        res.setEncoding('utf8');
        let rawData = '';
        res.on('data', (chunk) => rawData += chunk);
        res.on('end', () => {
            re = rawData;
            callback&&callback(name + ':' + re);
        });
    });
}

requestOrderAPI(name,floor,function(res){
    //我是re
});
PHP中文网

由于request没有promise对象,所以在这里构造一个promise对象。

const request = require('request');
const cheerio = require('cheerio');
function reqst(key) {
  return new Promise((resolve, reject) => {
    request({
      method: "GET",
      url: encodeURI(`http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=${key}`)
    }, (err, res, body) => {
      if (!err && res.statusCode == 200) {
        let ret = [];
        let $ = cheerio.load(body)
        let datas = Array.from($(".result")).splice(0, 5);
        for (var i = datas.length - 1; i >= 0; i--) {
          let data = {
            title: $(datas[i]).find('.c-title').text(),
            author: $(datas[i]).find('.c-author').text(),
            summary: $(datas[i]).find('.c-summary').text()
          }
          ret.unshift(data)
        }
        resolve(ret)
      }
    })
  })
}

//接收的时候
reqst(1)
  .then((result) => {
    console.log(result)
  })
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号