关闭功能无法正常工作

时间:2020-08-02 10:32:40

标签: swift firebase google-cloud-firestore

不幸的是,在swiftUI中的社交应用上,我正在使用Firebase作为后端 我发现有时候侦听器(我不知道为什么)下载2/3次相同的更改,因此在一些stackOverflow帮助下,我想出了以下功能来侦听更改并将其发布在视图上。

QueryInterface

我发现的问题是:据我所知,成功的闭包应该放在forEach之后。 这样,我可以使用userConfirmFriendsArray:[UserModel](请参阅我对代码的评论) 但看起来它总是返回一个空数组,为什么?如果大小写.add将用户追加到里面 userConfirmFriendsArray。

下面是我如何使用getuserConfirmFriend()

public function findShy2($searchWord)
{

    /** @var ConnectionPool $pool */
    $pool = GeneralUtility::makeInstance(ConnectionPool::class);
    $connection = $pool->getConnectionForTable('table');

    $queryBuilder = $connection->createQueryBuilder();

    $preQuery = $queryBuilder
        ->select('uid')
        ->from('table')
        ->where("REPLACE(name,'­', '') like :name")
        ->setParameter('name', "%{$searchWord}%");

    // for debug only
        echo($query->getSQL());
        print_r($query->getParameters());

    $uids = [];
    foreach ($preQuery->execute()->fetchAll() as $item) {
        $uids[] = $item['uid'];
    }

    if(count($uids) > 0){
        $interfaceQuery = $this->createQuery();
        $interfaceQuery->matching(
            $interfaceQuery->in('uid', $uids)
        );

        return $interfaceQuery->execute();
    }

    return [];
}

为了查看更改,我必须将onSuccess(userConfirmFriendsArray)闭包放到案例.add:里面,但是为什么呢?不能放在forEach之后?如果我放在那里,总会给我一个空数组。

谢谢

1 个答案:

答案 0 :(得分:0)

因为snapshot.documentChanges.forEach正在执行操作并在不同线程中异步调用其关闭

因此,当您在onSuccess(userConfirmFriendsArray)之后调用snapshot.documentChanges.forEach行时,尚未调用闭包

并且您有self.downloadImageForAdmin(userID: idUser)也在不同线程中调用了关闭异步操作

您可以阅读如何multithreading work