Javascript 在Meteor中,是否可以从同步函数(与wrapAsync相反)生成异步函数?
我知道如何使用Meteor.wrapAsync(),使接受回调或返回承诺的函数像同步函数一样可用 有可能做相反的事情吗?如果有,怎么做?我有一个服务器端函数,可以同步调用一些Meteor东西(包括集合和帐户)。我希望能够在批处理中同时运行它,使用类似Javascript 在Meteor中,是否可以从同步函数(与wrapAsync相反)生成异步函数?,javascript,asynchronous,meteor,callback,Javascript,Asynchronous,Meteor,Callback,我知道如何使用Meteor.wrapAsync(),使接受回调或返回承诺的函数像同步函数一样可用 有可能做相反的事情吗?如果有,怎么做?我有一个服务器端函数,可以同步调用一些Meteor东西(包括集合和帐户)。我希望能够在批处理中同时运行它,使用类似p-all或async.js的方法来处理数组中的项并等待完成 该应用程序使用Meteor 1.6.0.1 下面是一些不起作用的代码,因为“流星代码必须始终在光纤中运行”: 我们也欢迎对Meteor中实现相同目标的不同/适当方法提出建设性建议。Mete
p-all
或async.js
的方法来处理数组中的项并等待完成
该应用程序使用Meteor 1.6.0.1
下面是一些不起作用的代码,因为“流星代码必须始终在光纤中运行”:
我们也欢迎对Meteor中实现相同目标的不同/适当方法提出建设性建议。
Meteor.defer
要求在光纤中运行传递的函数。这可以使用Meteor.bindEnvironment解决:
Meteor.defer(Meteor.bindEnvironment)(函数(){
试一试{
const result=createUserFromEntry(条目、学校ID、创建者ID、recordTypeId、signupYmd);
决心(结果);
}捕获(exc){
拒绝(exc);
}
}))
p-all
函数不需要包装,因为它已经是异步的:
Meteor.startup(异步函数(){
const done=await pAll(操作,{concurrency:8,stopOnError:false})
})
然而,有一种很好的方法,可以让您使用Promise在光纤中运行同步函数中的异步代码。wait
:
流星启动(函数(){
const done=Promise.await(pAll(actions,{concurrency:8,stopOnError:false}))
})
请注意,
Promise.await
是Meteor特有的,仅在服务器上可用。Meteor.defer
要求传递的函数在光纤中运行。这可以使用Meteor.bindEnvironment解决:
Meteor.defer(Meteor.bindEnvironment)(函数(){
试一试{
const result=createUserFromEntry(条目、学校ID、创建者ID、recordTypeId、signupYmd);
决心(结果);
}捕获(exc){
拒绝(exc);
}
}))
p-all
函数不需要包装,因为它已经是异步的:
Meteor.startup(异步函数(){
const done=await pAll(操作,{concurrency:8,stopOnError:false})
})
然而,有一种很好的方法,可以让您使用Promise在光纤中运行同步函数中的异步代码。wait
:
流星启动(函数(){
const done=Promise.await(pAll(actions,{concurrency:8,stopOnError:false}))
})
请注意,Promise.await
是Meteor特有的,仅在服务器上可用
const actions = entries.map(entry =>
() => new Promise((resolve, reject) =>
Meteor.defer(() => {
try {
const result = createUserFromEntry(entry, schoolId, creatorId, recordTypeId, signupYmd);
resolve(result);
} catch (exc) {
reject(exc);
}
})
)
);
Meteor.wrapAsync(callback =>
pAll(actions, { concurrency: 8, stopOnError: false })
.then(res => callback(null, res))
.catch(err => callback(err, null))
)();