php - Bagaimana untuk menentukan sama ada semua panggilan balik tak segerak telah selesai dalam swoole?
phpcn_u1582
phpcn_u1582 2017-05-27 17:43:09
0
1
834

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_u1582
phpcn_u1582

membalas semua(1)
PHPzhong

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan