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

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のプロジェクト



All Articles