使用javascript获取函数内的返回值

时间:2018-04-12 03:51:21

标签: javascript ajax meteor xml-parsing

我怎样才能获得'返回'来自alexa函数的价值?

我尝试使用新函数init()来包装所有操作,但没有运气。甚至没有错误或什么,当我使用

console.log(result.rank);

我在控制台中收到正确的值,没有问题。

3

代码

rank: function() {
    var a = document.createElement('a');
    a.href = this.url;
    var alexa = require('alexarank');
    function init(){
    alexa(a.hostname, function(error, result) {
        if (!error) {
          return result.rank;
        } else {
            console.log(error);
        }
      });
    }
    return init();

2 个答案:

答案 0 :(得分:0)

Meteor方法中最简单的方法是使用Meteor.wrapAsync

rank: function() {
    var alexa = require('alexarank');
    var alexaSync = Meteor.wrapAsync(alexa);
    var result = alexaSync(a.hostname);
    return result.rank;
}

Meteor.wrapAsync接受一个异步函数,它接受一个回调作为它的最后一个参数,并使其工作就好像它是同步的(通过光纤的魔力)

请注意,Meteor方法也可以返回promise并等待promise的解析。因此,如果您使用的库支持promise,则可以使您的函数成为异步函数,并await来自库的结果。或者在你自己的承诺中包装它的回调,await / return

答案 1 :(得分:0)

我设法做到了, 传递回调: https://stackoverflow.com/a/6847754/7693078

rank: function() {
    var a = document.createElement('a');
    a.href = this.url;
    var alexa = require('alexarank');
    function ranking(x,y){ 
      alexa(a.hostname, function(error, result) {
        if (!error) {
           y(result.rank);
        } else {
           console.log(error);
        }
      });
    }
    ranking("x", function(y){
      var span = document.getElementById("ranking");
      var txt = document.createTextNode(y);
      span.appendChild(txt);
    });
  }