- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
好吧,菜鸟来了。仍在学习。我不明白如何让我的方法将 Meteor.wrapAsync
函数的结果返回到客户端上的 Meteor.call。我的方法中的 console.log(companies);
生成一个函数,而不是结果。我在这里不明白什么?
路径:client.jsx
Meteor.call('getTop100ASX', (error, result) => {
console.log(result);
});
路径:method.js
Meteor.methods({
'getTop100ASX'() {
const aggregateFunc = db.collection('companiesASX').aggregate([{
$group: {
_id: {
location: "$google_maps.geometry_location"
},
companies: {
$addToSet: {
name: "$company_name"
}
}
}
}]).toArray((err, result) => {
return result;
});
const companies = Meteor.wrapAsync(aggregateFunc);
console.log(companies);
return companies;
},
});
最佳答案
wrapAsync
包装一个通常需要回调的函数,并可以利用fibers
以同步方式在服务器上调用该包装函数。 (即接受一个函数+上下文并返回一个函数)。
它无法获取某些值并神奇地从中提取预期结果(即,在您的示例中,从 result
回调中提取 toArray
)。
你给它的不是一个函数,而是一个Promise
对象(从调用 toArray
返回)。
由于它已经返回了一个 promise ,因此您有多种选择:
更简单的方法是返回该 Promise(并且不需要 toArray()
中的回调),因为如果 Meteor 方法返回 Promise,服务器将等待 Promise 解析,然后将结果返回给客户端。
Meteor.methods({
'getTop100ASX'() {
return db.collection('companiesASX').aggregate([...]).toArray();
},
});
如果需要进一步处理companies
在该方法中,您可以使用 async/await,例如:
Meteor.methods({
async 'getTop100ASX'() {
const companies = await db.collection('companiesASX').aggregate([{
$group: {
_id: {
location: "$google_maps.geometry_location"
},
companies: {
$addToSet: {
name: "$company_name"
}
}
}
}]).toArray();
let someResult = sumeFunc(companies);
return someResult;
},
});
为了完整起见,为了使用wrapAsync
,您应该提供 toArray
方法和上下文如下所示:
Meteor.methods({
'getTop100ASX'() {
const cursor = db.collection('companiesASX').aggregate([{
$group: {
_id: {
location: "$google_maps.geometry_location"
},
companies: {
$addToSet: {
name: "$company_name"
}
}
}
}]);
// wrap the cursor's `toArray` method and preservs the context
const syncToArray = Meteor.wrapAsync(cursor.toArray, cursor);
// and call the wrapped function in a sync manner
const companies = syncToArray();
return companies;
},
});
关于javascript - wrapAsync 返回函数而不是结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49571978/
如何使用Meteor wrapAsync ? 以下是我正在尝试做的事情 if (tempTreatment.groupId === undefined) { // create new g
好吧,菜鸟来了。仍在学习。我不明白如何让我的方法将 Meteor.wrapAsync 函数的结果返回到客户端上的 Meteor.call。我的方法中的 console.log(companies);
我用 Meteor._wrapAsync 包装了一个函数 writeTransaction() 并在写入 MySQL 事务的 for 循环中调用它 5 次。 但是从 MySQL 查询日志来看,循环的下
在我的 Meteor 客户端代码中,我尝试使用只有异步调用的第三方 API。如何在客户端上使用 Meteor.wrapAsync 以同步方式调用此 API?文档似乎表明这是可能的:http://doc
我正在尝试使用 Meteor.wrapAsync 使用 Slingshot 上传文件,然后获取上传 URL。我已经创建了该函数,但是当我运行它时 image_url 最终未定义。虽然图像确实上传成功。
我一直在努力工作 Meteor.WrapAsync 我已阅读 Meteor wrapAsync syntax回答,这个视频https://www.eventedmind.com/feed/meteor
我正在尝试使用 wrapAsync 包装来自 Node 包的函数。 filepicker = new Filepicker('API Key') filepickerStatSync = Meteor
背景 我正在尝试将 Stripe 支付集成到我的网站中。我需要使用我的私有(private) strip key 创建一个 strip 用户。我将此 key 存储在我的服务器上,并调用服务器方法来创建
我正在使用 Meteor._wrapAsync 强制只调用一次函数 writeMeLater任意时刻执行。如果在 1 秒内对 writeMeLater 进行了 10 次调用,则其他 9 次调用应按顺序
当使用 npm 模块 (node-celery) 中的函数 client.call 时,client.call 的回调函数似乎未执行。 Meteor.methods({ 'estimates.
我正在尝试使用 Meteor Method 从一个 API 获取 json 数据,我尝试使用 MeteorwrappAsync 以及 NodeFuture。下面是我的代码: 模板助手 - 客户端
我在 meteor 服务器启动时收到了警告。 Meteor._wrapAsync 已重命名为 Meteor.wrapAsync undefined。有谁知道为什么? 最佳答案 这只是为了让您知道以前未
加载模板 View 时,客户端向服务器执行 Meteor.call('getPlayerScore') 以获取一些数据。 在服务器上,getPlayerScore 方法使用 _.wrapAsync 执
我正在尝试使用 mailchimp-api-v3在 Meteor (1.4.1.3) 项目中(我喜欢这个项目中的批量支持) 我已将调用包装在 Meteor 的 .wrapAsync 中(那里有一些学习
我正在尝试使用 Mongoose 和 ExpressJS 在 MongoDB 中运行两个异步查询。 exports.get_options_data = function (req, res) {
在 Meteor JS 代码中,我使用 HTTP.get 方法在方法内调用服务器。我必须将结果返回给客户端,因此我将此函数包装为Meteor.wrapAsync 获取同步函数。 var httpSyn
我正在尝试在 Meteor 方法中使用 child_process.spawn()。我想从外部进程捕获 PID、stdout、stderr 和退出代码,并将所有这些存储在数据库中。 一切正常,直到我添
我是一名优秀的程序员,十分优秀!