2017-03-10 25 views
1

我正在编写一个getWebContent函数,它使用Promise(我也使用Request模块)返回网页的内容。使用Promise对象返回一个函数的值

我想使用此功能的方法是VAR含量= getWebContent(),使内容变量包含请求的网站的数据。我开始如下:

var request = require('request') 
 

 
var getWebContent = function() { 
 
    
 
    target = 'http://www.google.com'; 
 
    var result = null; 
 
    var get = function (url) { 
 
     return new Promise(function (resolve, reject) { 
 
      function reqCallback(err, res, body) { 
 
       if (err) reject(err); 
 
       else resolve(body); 
 
      }; 
 
      request(url, reqCallback); 
 
     }); 
 
    }; 
 

 
    get(target).then(function (res) { 
 
     result = res; 
 
     console.log(res); 
 
    }); 
 
    
 
    return result; 
 
}; 
 

 
var goog = getWebContent(); 
 
console.log(goog)

但是,此代码不能正常工作,因为该函数返回结果变量,该变量为空,无极对象被解决之前。你能不能让我知道我应该如何修复我的代码,以便它按预期工作?

+0

@JLRishe我正在学习这个Web应用程序,因为我是新手。我不知道你为什么如此讽刺,但我不相信他们是为了好玩而做的。我正确回答你的问题吗? – noclew

+0

@JLRishe谢谢您的参考。 – noclew

回答

2

无论如何你需要使用Promise。您不能在Javascript中使用异步操作创建同步结果。

var request = require('request') 

var getWebContent = function() { 

    target = 'http://www.google.com'; 
    var result = null; 
    var get = function (url) { 
     return new Promise(function (resolve, reject) { 
      function reqCallback(err, res, body) { 
       if (err) reject(err); 
       else resolve(body); 
      }; 
      request(url, reqCallback); 
     }); 
    }; 

    return get(target); 
}; 

var goog = getWebContent().then(function (res) { 
    console.log(goog); 
}); 
+0

我明白了。那么,一旦我开始承诺,我是否总是不得不使用Promise链?另外,在修改过的代码中,是否有办法将内容分配到goog变量,即var goog = ? – noclew

+1

你可以使用回调,但它不是很酷。还有其他一些方法来处理异步代码,如异步,但是是的...一旦你启动了Promise,你需要用Promise链来完成它;) – hya

+0

想这样:在JavaScript中,你不能破坏它,一旦你承诺: D –