Async Veri Getirme // Uptime35

Uptime35

Üye
24 Nis 2015
233
0
İZMİR
thtson2.png


Bu, senkronize işlevlerinizi, güzel bir temiz veri bağımlılığı grafiğimize sahip olacak şekilde organize etmenin bir yolunu gösterir.





Kod:
<? hh

Namespace  Hack \ KullanıcıDokümantasyonu \ Async \ Guidelines \ Examples \ DataDependencies ;

// Böylece asio-yardımcı programlarını kullanabilirsiniz function vm () 
class  PostData  { 
  // yapıcı argümanı tanıtımını kullanarak 
  public  function  __construct ( public  string  $ text )  {} 
}

zaman uyumsuz  fonksiyon  fetch_all_post_ids_for_author ( int  $ AUTHOR_ID ) 
  :  Awaitable < array < int >>  {

  // Sorgu veritabanı vb., Ancak şimdilik, yalnızca dönüşü oluşturan şeyler 
  döndüren  dizi ( 4 ,  53 ,  99 ); 
}

zaman uyumsuz  fonksiyon  fetch_post_data ( int  $ Post_id ) :  Awaitable < PostData >  { 
  // Sorgu veritabanı vb ama şimdi, bir şey rastgele dönüş 
  dönüş  yeni  PostData ( str_shuffle ( "ABCDEFGHIJKLMNOPQRSTUVWXYZ" )); 
}

Async  fonksiyonu  fetch_comment_count ( int  $ posta_id ) :  Bekleyilebilir < int >  { 
  // Sorgu veritabanını vb., Ancak şu an için bir şey rastgele 
  dönüş return  rand ( 0 ,  50 ); 
}

zaman uyumsuz  fonksiyon  fetch_page_data ( int  $ AUTHOR_ID ) 
  :  Awaitable < Vektör < ( PostData ,  int ) >>  {

  $ All_post_ids  =  fetch_all_post_ids_for_author ( $ author_id ) bekliyor  ; // Bir post kimliğini bir veri kümesi kümesine dönüştüren bir eşzamanlı kapanış // post veri ve yorum sayımı $ post_fetcher = async işlevi ( int $ post_id ) : bekleniyor < ( PostData , int ) > { list ( $ post_data , $ comment_count ) = bekliyoruz \ HH \ Asio \ v ( dizi ( fetch_post_data ( $ Post_id ), Fetch_comment_count ( $ post_id ), ))); / * Sorun, v Traverable <Beklenmedik <T> değerini alır ve      * Bekleyilebilir <Vektör <T> değerini döndürür , ancak      her iki int ve PostData'yı temsil eden T'nin iyi bir değeri yoktur , bu nedenle şu an nerdeyse Sendika tipi.      *      * Şimdi tipik denetleyiciye neler olduğunu anlatmalıyız.      * Gelecekte, bunu desteklemek için HH \ Asio \ va () - VarArgs - eklemeyi planlıyoruz.      * Bu,      * bağımsız değişken sayısına bağlı olarak değişen bir tür imza      sahibidir , örneğin:      * * - va (beklenebilir <T1>, Bekar <T2>): Beklenen <(T1, T2)>      * - va (Bekar < T1>      * Bekleyen <T2>,      * Beklenebilir <T3>): Beklenebilir <(T1, T2, T3)>      *      * Ve benzeri türler için T1, T2, ... Tn'ye gerek kalmaz.      * / Değişmez ( PostData'nın $ post_data instanceof , "Bu iyi" ); Değişmez ( is_int ( $ comment_count ), "Bu iyi" ); return tuple ( $ post_data , $ COMMENT_COUNT ); }; T1, T2, ... Tn ile ilişkili tiplere gerek kalmadan. * / Değişmez ( PostData'nın $ post_data instanceof , "Bu iyi" ); Değişmez ( is_int ( $ comment_count ), "Bu iyi" ); return tuple ( $ post_data , $ COMMENT_COUNT ); }; T1, T2, ... Tn ile ilişkili tiplere gerek kalmadan. * / Değişmez ( PostData'nın $ post_data instanceof , "Bu iyi" ); Değişmez ( is_int ( $ comment_count ), "Bu iyi" ); return tuple ( $ post_data , $ COMMENT_COUNT ); }; "Bu iyi" ); return tuple ( $ post_data , $ COMMENT_COUNT ); }; "Bu iyi" ); return tuple ( $ post_data , $ COMMENT_COUNT ); };
  
  
         
      
       
        
        
      
    















       
     
      
  

  // sonuçların bir diziye sonrası kimliklerinin dizi Transform 
  asio-araçlardan gelen vm () işlevi ile // 
  geri  bekliyoruz  \ HH \ Asio \ vm ( $ all_post_ids ,  $ post_fetcher ); 
}

zaman uyumsuz  fonksiyon  generate_page ( int  $ AUTHOR_ID ) :  Awaitable < dize >  { 
  $ tuples  =  bekliyor  fetch_page_data ( $ AUTHOR_ID ); 
  $ Sayfa  =  "" ; 
  Foreach  ( $ tuple  as  $ tuple )  { 
    list ( $ post_data ,  $ comment_count )  =  $ tuple ; 
    // Normal olarak veriyi HTML'ye dönüştürün, ancak şimdilik, sadece 
    // normal bir dize 
    $ page  . =  $ Post_data -> metin oluşturmanız  yeterlidir .  ""  .  $ Comment_count  .  PHP_EOL ; 
  } 
  Return  $ sayfayı ; 
}

$ Page  =  \ HH \ Asio \ join ( generate_page ( 13324 ));  // sadece bir kullanıcı kimliği oluşturdu 
var_dump ( $ page );





MySQL'e Erişme

Veritabanı bağlantısı ve sorguları gerçekleştirmek için async mysql uzantısını kullanın.​


Kod:
<? hh

Namespace  Hack \ User********ation \ Async \ Extensions \ Örnekler \ MySQL ;

kullanmak  \ kesmek \ User********ation \ uyumsuz \ \ Extensions AsyncMysql \ ConnectionInfo \ örnek  olarak  CI ;

Async  işlevi  get_connection () :  Bekleyilebilir < \ AsyncMysqlConnection >  { 
  // Varsayılan seçeneklerle bir bağlantı havuzu edin 
  $ pool  =  new  \ AsyncMysqlConnectionPool ( array ()); 
  Bu kod test etmek için çalışır bir şey için kimlik bilgilerini değiştirme // 
  dönüşünü  beklemektedir  $ havuz > - bağlamak ( 
    CI :: $ konak , 
    CI :: $ portu , 
    CI :: $ db , 
    CI :: $ user , 
    CI :: $ Passwd , 
  );


zaman uyumsuz  fonksiyon  fetch_user_name ( \ AsyncMysqlConnection  $ conn , 
                               int  $ user_id )  :  Awaitable < dize >  { 
  // Masanız ve sütun kursu, farklı olabilir 
  $ sonucu  =  bekliyor  $ conn -> queryf ( 
    test_table userID =% d den 'SEÇ adı ' , 
    $ Kullanıcı_adı 
  ); 
  // Bir kullanıcı kimliği 
  değişmez ( $ result -> numRows ()  ===  1 ,  'bir satır tam' ) 
  için birden fazla satır döndürmemelidir ; // Her sütunun dize değerlerini tutan vektör nesnelerinin vektörü 
  // sorguda 
  $ vector  =  $ sonuç -> vectorRows (); 
  Return  $ vektör [ 0 ] [ 0 ];  // Sorgumuzda bir sütun vardı 
}

zaman uyumsuz  fonksiyon  get_user_info ( \ AsyncMysqlConnection  $ conn , 
                             dize  $ user ) :  Awaitable < Vector < Haritası >>  { 
  $ sonuç  =  bekliyor  $ conn -> queryf ( 
    'test_table gelen * NEREDE name =% s SEÇ' , 
    $ conn -> escapeString ( $ Kullanıcı ) 
  ); 
  // 
  Sorguda // 
  her sütunun dize değerlerini tutan harita nesnelerinin vektörü ve sütunlar sütun adlarıdır $ map  =  $ result -> mapRows (); 
  return  $ harita ; 
}

Async  işlevi  async_mysql_tutorial () :  Bekleyilebilir < **** >  { 
  $ conn  =  await  get_connection (); 
  eğer  ( $ Conn  ==!  boş )  { 
    $ sonuç  =  bekliyor  fetch_user_name ( $ conn ,  2 ); 
    Var_dump ( $ sonuç ); 
    $ Info  =  get_user_info'yu bekliyor  ( $ conn , 'Fred Emmott' ); Var_dump ( $ info instanceof Vector ); Var_dump ( $ info [ 0 ] instanceof Haritası ); } } 
      
      
  


\ HH \ Asio \ join ( async_mysql_tutorial ());
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.