我有以下从我的Android应用调用的用node.js编写的firebase云功能
exports.findNearestBranch = functions.https.onCall((data, context) => {
var latitutde = data.lat;
var longitude = data.long;
var ret;
return getLocationObject(latitutde,longitude)
.then(function(result){
var fromObject=result;
console.log('CONTEXT CLIENT '+latitutde+' LONG '+longitude);
calculateNearestBranch(fromObject)
.then(function(result){
console.log("TO APP "+JSON.stringify(result));
ret=result;
})
.catch(function(error){
});
})
.catch(function(error){
});
});
该函数运行正常,但尝试使用以下方法在Android中获取结果时却得到null
private Task<String> inputCurrentLocation(String[] geoLocations) {
Map<String, Object> data = new HashMap<>();
data.put( "lat", geoLocations[0] );
data.put( "long", geoLocations[1] );
return mFunctions
.getHttpsCallable( "findNearestBranch" )
.call( data )
.continueWith( new Continuation<HttpsCallableResult, String>() {
@Override
public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
String result = (String) task.getResult().getData();
return result;
}
} ).addOnCompleteListener( new OnCompleteListener<String>() {
@Override
public void onComplete(@NonNull Task<String> task) {
String result = task.getResult();
System.out.println("RESULT FROM NODE "+result+" SUCCESS"+task.isSuccessful());
}
} );
}
我在网上浪费了无数的时间,试图找到问题所在,但没有成功。有人请指出我的问题所在。
答案 0 :(得分:1)
您不会在可调用的https中返回任何内容。
尝试将return
添加到calculateNearestBranch
函数中,并使该函数返回result
变量。
此外,您还应该在catch
语句中添加一些记录,以使可调用对象不会静默失败。
exports.findNearestBranch = functions.https.onCall((data, context) => {
var latitutde = data.lat;
var longitude = data.long;
return getLocationObject(latitutde,longitude)
.then(function(result){
var fromObject=result;
console.log('CONTEXT CLIENT '+latitutde+' LONG '+longitude);
// Added `return`
return calculateNearestBranch(fromObject)
.then(function(result){
console.log("TO APP "+JSON.stringify(result));
// Returned `result`
return result;
})
.catch(function(error){
});
})
.catch(function(error){
});
});