1.NCMBから画像のurlを取得し、
2.配列に加えた後
3.URLにアクセスして画像を取得
4.CollectionViewのCellの上に載っているImageViewに表示する

という作業をしたいのですが、データストアからデータを取得するより先に戻り値を返してしまい、処理が終了してしまいます。

4の処理を遅延させて、データストアからデータを取得し配列に加えた後に、CollectionViewのCellの上に載っているImageViewに表示するにはどうしたらよいのでしょうか。

func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell{

    // クラスのNCMBObjectを作成
    let obj = NCMBObject(className: "image")
    // objectIdプロパティを設定
    obj?.objectId = "xxxxxxxxxxxx"
    // 設定されたobjectIdを元にデータストアからデータを取得
    obj?.fetchInBackground { error in
        if error != nil {
            // 取得に失敗した場合の処理
        }else{
            // 取得に成功した場合の処理
            // (例)取得したデータの出力
            print(obj!.object(forKey: "imageUrl"))
            self.imageUrlArray.append(obj!.object(forKey: "imageUrl") as! String)

        }
    }

    // Cell はストーリーボードで設定したセルのID
    let testCell:UICollectionViewCell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)

    var url = URL(string: self.imageUrlArray[indexPath.row])

    do {
        self.imageData = try Data(contentsOf: url!,options: NSData.ReadingOptions.mappedIfSafe);

    } catch {
        print("Error: can't create image.")
    }

    // Tag番号を使ってImageViewのインスタンス生成
    let imageView = testCell.contentView.viewWithTag(1) as! UIImageView
    // 画像配列の番号で指定された要素の名前の画像をUIImageとする
    imageView.image = UIImage(data: self.imageData! as Data)

    return testCell
}