Rumah  >  Soal Jawab  >  teks badan

php - Bagaimana untuk menentukan sama ada semua panggilan balik tak segerak telah selesai dalam swoole?

S1

<?php

$result = [];

(new swoole_mysql)->connect($conf, function ($db, $r) use (&$result) {
    $result[] = 1;
});

(new swoole_mysql)->connect($conf, function ($db, $r) use (&$result) {
    $result[] = 2;
});

Bagaimana untuk menilai bahawa kedua-dua asyncIO di atas semuanya telah dilaksanakan supaya saya boleh mengeluarkan $hasil?

S2

<?php
$a = 1;
(new swoole_mysql)->connect($conf, function($db, $r) use (&a) {
    $a = 2;
});

while ($a != 2)
    continue;
    
echo $a;

Ada apa-apa yang salah dengan kod di atas? Mengapa echo $a tidak pernah dilaksanakan?

phpcn_u1582phpcn_u15822673 hari yang lalu753

membalas semua(1)saya akan balas

  • PHPz

    PHPz2017-05-27 17:45:09

    A1:
    Memandangkan bukan sekatan digunakan, lebih baik menggunakan logik perniagaan di dalam panggilan balik

    <?php
    (new swoole_mysql)->connect($conf, function ($db, $r) {
        
        //something
        (new swoole_mysql)->connect($conf, function ($db, $r) {
            //something
        });
    });
    
    

    A2:

    Oleh kerana ia adalah operasi tak segerak, fungsi panggil balik mungkin tidak dapat dilaksanakan dalam urutan mana, jadi konteksnya tidak boleh dijamin. Adalah disyorkan untuk menggunakan sintaks coroutine untuk melakukannya.

    Ringkasan:
    Penyoal perlu memahami model tak segerak swoole dan tidak menggunakan pemikiran segerak untuk berkembang.

    balas
    0
  • Batalbalas