纤维/未来实际上做了什么?

use*_*180 8 node.js npm meteor node-fibers

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

Npm.require('fibers/future');
Run Code Online (Sandbox Code Playgroud)

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

Future = Npm.require('fibers/future');
var accessToken = new Future();
Run Code Online (Sandbox Code Playgroud)

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

ko0*_*tik 10

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

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

  • future.wait() 基本上告诉你的线程基本上暂停,直到告诉恢复.
  • future.return(value)告诉等待future他可以恢复的第一种方式,它也非常有用,因为它返回一个值等待然后可以被赋值,因此像const ret = future.wait()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;
  }
});
Run Code Online (Sandbox Code Playgroud)