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之后?如果我放在那里,总会给我一个空数组。
谢谢
答案 0 :(得分:0)
因为snapshot.documentChanges.forEach
正在执行操作并在不同线程中异步调用其关闭
因此,当您在onSuccess(userConfirmFriendsArray)
之后调用snapshot.documentChanges.forEach
行时,尚未调用闭包
并且您有self.downloadImageForAdmin(userID: idUser)
也在不同线程中调用了关闭异步操作
您可以阅读如何multithreading work