2016-04-15 28 views
4

下面的代碼行是做什麼的?纖維/未來實際上做了什麼?

Npm.require('fibers/future'); 

我在網上找了例子,我遇到了幾個前來像這樣:

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

accessToken變量是怎樣在這種情況下?

+1

這是關於回調和承諾。它允許您同步運行異步代碼。 – Molda

回答

6

問題是有點老,但我的2美分:

由於Molda在註釋中說,未來的主要目的是使異步事情同步工作。 future例如配備了3種方法:

  • future.wait()主要是告訴你的線程,基本暫停直到被告知恢復。
  • future.return(value),第一種方式告訴等待future他能恢復,這也是非常有用的,因爲它返回一個值等待然後可以用分配,因此線條狀const ret = future.wait()其中RET成爲你返回的值一旦恢復。
  • future.throw(error),非常明確,使您的攔截線與給定的錯誤拋出。

讓事情在javascript中同步可能聽起來有點令人不安,但它有時是有用的。在Meteor中,當您在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; 
    } 
}); 
相關問題