Firebase函数。https.onCall有效,但返回null

时间:2018-10-03 10:00:13

标签: android node.js firebase

我有以下从我的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());
      }
    } );
}

我在网上浪费了无数的时间,试图找到问题所在,但没有成功。有人请指出我的问题所在。

1 个答案:

答案 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){

    });
});