使用 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);
});
}
如何从 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);
});
}