gpt4 book ai didi

javascript - 如何使用 Meteor 在函数中获取异步数据

转载 作者:数据小太阳 更新时间:2023-10-29 04:07:05 25 4
gpt4 key购买 nike

我是 Meteor 的新手,我正在尝试从 Heroku API 获取异步数据。

服务器端代码:

heroku = Meteor.require("heroku");

Meteor.methods({
'getHeroku': function getHeroku(app){
client = new heroku.Heroku({key: "xxxxxx"});
client.get_app(app, function (error, result) {
return result;
});
}
});

客户端代码:

Template.herokuDashboard.helpers({
appInfo: function() {
Meteor.call('getHeroku', "meathook-api", function (error, result) {
console.warn(result);
} );
}
});

Heroku 需要一段时间来回答,所以答案是 undefined

那么捕获异步结果的最佳方式是什么?

谢谢。

最佳答案

一般解决方案:

客户端:

    if (Meteor.isClient) {
Template.herokuDashboard.helpers({
appInfo: function() {
return Session.get("herokuDashboard_appInfo");
}
});
Template.herokuDashboard.created = function(){
Meteor.call('getData', function (error, result) {
Session.set("herokuDashboard_appInfo",result);
} );
}
}

无法直接从 Meteor.call 返回结果。但是至少有 2 个解决方案(@akshat 和 @Hubert OG): How to use Meteor methods inside of a template helper

服务器端(Meteor._wrapAsync):

使用 Meteor._wrapAsync :

if (Meteor.isServer) {
var asyncFunc = function(callback){
setTimeout(function(){
// callback(error, result);
// success :
callback(null,"result");
// failure:
// callback(new Error("error"));
},2000)
}
var syncFunc = Meteor._wrapAsync(asyncFunc);
Meteor.methods({
'getData': function(){
var result;
try{
result = syncFunc();
}catch(e){
console.log("getData method returned error : " + e);
}finally{
return result;
}

}
});
}

正确使用 Future 库:

if (Meteor.isServer) {
Future = Npm.require('fibers/future');

Meteor.methods({
'getData': function() {
var fut = new Future();
setTimeout(
Meteor.bindEnvironment(
function() {
fut.return("test");
},
function(exception) {
console.log("Exception : ", exception);
fut.throw(new Error("Async function throw exception"));
}
),
1000
)
return fut.wait();
}
});
}

使用 Future 库 WITHOUT Meteor.bindEnvironment 不推荐,参见:

还有第三种方法使用 Async utilities

关于javascript - 如何使用 Meteor 在函数中获取异步数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24743402/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com