10

下面的代码行是做什么的?

Npm.require('fibers/future');

我在网上找了一些例子,我遇到了一些这样的例子:

Future = Npm.require('fibers/future');
var accessToken = new Future();

在这种情况下会有什么accessToken变量?

4

1 回答 1

11

问题有点老了,但我的 2 美分:

正如 Molda 在评论中所说,Future 的主要目的是让异步事物同步工作。 future实例带有 3 种方法:

  • future.wait()基本上告诉你的线程基本上暂停,直到被告知恢复。
  • future.return(value),第一种告诉等待future他可以恢复的方法,它也非常有用,因为它返回一个值 wait 然后可以分配,因此像const ret = future.wait()where ret 这样的行一旦恢复就会成为您的返回值。
  • future.throw(error),也非常明确,使您的阻塞行抛出给定错误。

在 javascript 中使事情同步可能听起来有点令人不安,但它有时很有用。在Meteor中,当您在 a 中链接异步调用Meteor.method并且希望将其结果返回给客户端时,它非常有用。你也可以使用Promises现在也完全支持的Meteor,我都使用过,它可以工作,这取决于你的喜好。

一个简单的例子:

Meteor.methods({
  foo: function() {
    const future = new Future();
    someAsyncCall(foo, function bar(error, result) {
      if (error) future.throw(error);
      future.return(result);
    });
    // Execution is paused until callback arrives
    const ret = future.wait(); // Wait on future not Future
    return ret;
  }
});
于 2016-11-29T11:47:36.687 回答