我怎样才能获得'返回'来自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();
答案 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);
});
}