使用 javascript 在函数内获取 return 值

Get return value inside a function with javascript

如何从 alexa 函数中获取 'return' 值?

我尝试创建一个新函数 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();

在 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 方法也可以 return 承诺并等待承诺解决。因此,如果您使用的库支持 promises,您可以使您的函数成为异步函数,并 await 来自库的结果。或者将其回调包装在您自己的承诺中,然后 await/return that.

我做到了, 传递回调:

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);
    });
  }