gpt4 book ai didi

javascript - 同步 Meteor.methods 函数中的 MeteorJS 异步代码

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

如何让客户端method.call等待异步函数完成?目前它到达函数的末尾并返回未定义。

客户端.js

Meteor.call( 'openSession', sid, function( err, res ) {
// Return undefined undefined
console.log( err, res );
});

服务器.js

Meteor.methods({
openSession: function( session_id ) {
util.post('OpenSession', {session: session_id, reset: false }, function( err, res ){
// return value here with callback?
session_key = res;
});
}
});

最佳答案

Meteor 的最新版本提供了未记录的 Meteor._wrapAsync 函数,它将带有标准 (err, res) 回调的函数转换为同步函数,这意味着当前 Fiber 在回调返回之前产生,然后使用 Meteor.bindEnvironment 来确保您保留当前的 ​​Meteor 环境变量(例如 Meteor.userId())

一个简单的用法如下:

asyncFunc = function(arg1, arg2, callback) {
// callback has the form function (err, res) {}

};

Meteor.methods({
"callFunc": function() {
syncFunc = Meteor._wrapAsync(asyncFunc);

res = syncFunc("foo", "bar"); // Errors will be thrown
}
});

您可能还需要使用 function#bind 来确保在包装之前使用正确的上下文调用 asyncFunc。有关详细信息,请参阅:https://www.eventedmind.com/tracks/feed-archive/meteor-meteor-wrapasync

关于javascript - 同步 Meteor.methods 函数中的 MeteorJS 异步代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13190328/

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