2016-11-17 13 views
0

buildパッケージに基づくコンポーネントであるAtomテキストエディタのビルドプロバイダで作業しています。このパッケージを使用すると、プロバイダーが実行可能かどうかを確認するためにいくつかのテストを実行し、それぞれtrueまたはfalseを返すことができます。親からの非同期関数からの戻り値

私はglobを使用して、特定のファイルタイプがプロジェクトフォルダに存在してビルドプロバイダを有効にするかどうかを判断しています。たとえば、lesscのビルドプロバイダをアクティブにするには、プロジェクトフォルダにLESSファイルを含める必要があります。

例:同じ非同期globを使用して可能である場合、私は思ったんだけど

isEligible() { 
    const paths = glob.sync("**/*.less"); 

    if (paths.length > 0) { 
     // one or more LESS files found 
     return true; 
    }  

    // no LESS files found 
    return false; 
} 

、特に私はisEligible()から状態を返すことができますか。以下はない仕事を行います。関数は非同期文を返す実行しているとして、あなたは何をする必要があるか代わりに動作しません

isEligible() { 
    return glob("**/*.less", function (err, files) { 
     if (err) { 
     return false; 
     } 

     return true; 
    }) 
} 
+0

できません!あなたは 'isEligible()。then((data)=> {})'を実行することができます。 – adeneo

答えて

0

次のコードは機能しません

はい。それはabsolutely cannot workです。

isEligible(つまり、buildパッケージ)の発信者が非同期をサポートしていない場合、機能を同期させる必要があります。回避策はありません。あなたは、isEligibleにコールバックを提供するための機能要求を提出したり、返品値として約束を受け入れたりするかもしれません。

+0

これは、AJSの回答と同様に私の以前のattempsが動作しない理由を説明しています。説明ありがとう! – idleberg

0

をコールバックすなわちを使用している:

isEligible(callback) { 
    glob("**/*.less", function (err, files) { 
     if (err) { 
     return false; 
     } 

     callback(true); 
    }) 
} 

使用

//call isEligible 

isEligible(function(result){ 
    //do something with result 
}); 
関連する問題