Javascript 在Meteor中,是否可以从同步函数(与wrapAsync相反)生成异步函数?

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

我知道如何使用Meteor.wrapAsync(),使接受回调或返回承诺的函数像同步函数一样可用

有可能做相反的事情吗?如果有,怎么做?我有一个服务器端函数,可以同步调用一些Meteor东西(包括集合和帐户)。我希望能够在批处理中同时运行它,使用类似
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))
  )();