【发布时间】:2018-08-06 07:46:32
【问题描述】:
我在从云函数获取结果时遇到问题。
这是我的云功能:
exports.retrieveTrips = functions.https.onCall((data, context) => {
const uidNumber = context.auth.uid;
var arrayOfResults = new Array();
var idOfFoundDoc;
var query = admin.firestore().collection('Users').where('UID','==', uidNumber);
query.get().then(snapshot =>
{
snapshot.forEach(documentSnapshot =>
{
idOfFoundDoc = documentSnapshot.id;
});
var queryDoc = admin.firestore().collection('Users').doc(idOfFoundDoc).collection('Trips');
queryDoc.get().then(snapshot =>
{
snapshot.forEach(documentSnapshot =>
{
arrayOfResults.push(documentSnapshot.data());
});
console.log('ARRAY: ' , arrayOfResults);
return arrayOfResults;
})
.catch (err =>
{
console.log ('Error adding document: ', err);
});
})
.catch (err => {
//response.send('Error getting documents', err);
console.log ('Error getting documents', err);
});
这是我的应用程序中的代码。
@IBAction func RetrieveTripsButton(_ sender: Any)
{
self.functions.httpsCallable("retrieveTrips").call() {(result, error) in
if let error = error as NSError? {
if error.domain == FunctionsErrorDomain
{
let message = error.localizedDescription
print ("Message: " + message)
}
return
}
print ("Result: -> \(type(of: result))")
print("Result.data type: \(type(of: result?.data))");
print ("Result.data -> \(result?.data)")
}
}
这是打印出来的结果。
Result: -> Optional<FIRHTTPSCallableResult>
Result.data type: Optional<Any>
Result.data -> Optional(<null>)
控制台日志能够正确打印arrayOfResults。此外,当我将此函数更改为 onRequest 并向其提供相关信息时,res.status(200).send(arrayOfResults) 能够在页面中显示 JSON 数组。
如果我将return arrayOfResults; 放在.then 函数之外,我会得到一个带有空数组的结果。我的问题与this problem here 类似,但当我返回{ text: "some_data" }; 时,我什至无法收到。
任何帮助都会很棒,谢谢!
【问题讨论】:
标签: swift firebase google-cloud-firestore swift4 google-cloud-functions