非同期プログラミング:高レベルのプリミティブ

Twisted非同期フレームワークの出現により、継続的な結果の概念が非常に一般的になりました。

まず、記事「 非同期プログラミング:Deferredの概念Deffered for JavaScript」を読むことをお勧めします

しかし、遅延された結果を使用することは、高レベルの抽象化なしではあまり便利ではありません。 これで、 Doフレームワークができました。

これで、次のようなアクションを実行できます。

複数のアクションを並行して実行する


// Multiple arguments
Do . parallel (
Do . read ( "/etc/passwd" ) ,
Do . read ( __filename )
) ( function ( passwd , self ) {
// Do something
} , error_handler ) ;

// Single argument
var actions = [
Do . read ( "/etc/passwd" ) ,
Do . read ( "__filename" )
] ;
Do . parallel ( actions ) ( function ( results ) {
// Do something
} , error_handler ) ;



いくつかのアクションを順番に実行する


// Multiple arguments
Do . chain (
Do . read ( __filename ) ,
function ( text ) {
return Do . save ( "newfile" , text ) ;
} ,
function ( ) {
return Do . stat ( "newfile" ) ;
}
) ( function ( stat ) {
// Do something
} , error_handler ) ;

// Single argument
var actions = [
Do . read ( __filename ) ,
function ( text ) {
return Do . save ( "newfile" , text ) ;
} ,
function ( ) {
return Do . stat ( "newfile" ) ;
}
] ;
Do . chain ( actions ) ( function ( stat ) {
// Do something
} , error_handler ) ;



ソース配列を結果に非同期的にマッピングします


var files = [ 'users.json' , 'pages.json' , 'products.json' ] ;
function load_file ( filename , callback , errback ) {
fs. read ( filename ) ( function ( data ) {
callback ( [ filename , data ] ) ;
} , errback ) ;
}
Do . map ( files , load_file ) ( function ( contents ) {
// Do something
} , error_handler ) ;


配列を非同期的にフィルター処理する


var files = [ 'users.json' , 'pages.json' , 'products.json' ] ;
function is_file ( filename , callback , errback ) {
fs. stat ( filename ) ( function ( stat ) {
callback ( stat. isFile ( ) ) ;
} , errback ) ;
}
Do . filter ( files , is_file ) ( function ( filtered_files ) {
// Do something
} , error_handler ) ;



さらに、 node.jsのラッパー提供されます。 githubのプロジェクト

Source: https://habr.com/ru/post/J84709/


All Articles