2016-05-26 3 views
0

Примечание: У меня ограниченный exp с js, так что поправьте меня, если я полностью ошибаюсь в том, как я описываю этот сценарий.Как успешно использовать обратный вызов функции javascript с запросом http

У меня есть два файла javascript. Я вызываю функцию в первом файле (на стороне клиента), который вызывает функцию во втором файле и использует обратный вызов из функции второго файла для целей response.success/.error в первом файле.

Если это не имеет смысла здесь некоторый код:

Примечание: это делается временно с помощью функции облака PARSE в. Дайте мне знать, нужна ли дополнительная информация в отношении тех, но не уверены, важно ли это.

Первый файл:

Parse.Cloud.define("methodName", function(request, response) { 
    ... 
    secondFile.myFunction(param1, { 
     stuff: request.params.stuff, 
    }, function (err, res) { 
     if (err) { 
      response.error(err); 
     } else { 
      response.success(res);// I'm assuming this is going to the hardcoded "yes." from httpRequest on second file's function 
     } 
    }); 
}); 

Второй файл:

myFunction: function(param1, properties, callback) { 
     if (!param1) return callback(new Error("Helpful error message")); 

     var headersForReq = { 
      ... 
     }; 

     var bodyForReq = ...; // the properties properly parsed 


     Parse.Cloud.httpRequest({ 
      method: 'PUT', 
      url: ..., 
      headers: headersForReq, 
      body: bodyForReq, 
      success: function (httpResponse) { 
       callback(null, 'yes'); // the hardcoded "yes" i referred to 
      }, 
      error: function (httpResponse) { 
       callback(httpResponse.status + httpResponse.error); 
      } 
     }); 
    } 

На моем клиенте, код рассматривается как успех (ошибки не выбрасываются или возвращается назад), но когда я печатаю вне значения, которое оно встречается как (null), а не «да».

Что здесь происходит? (Обратите внимание, что httpRequest в настоящее время ничего не делает, его трудно проверить, правильно ли отправлен запрос, поскольку он отправляется стороннему API).

Я знаю, что метод второго файла правильно называется. Так что это не глупый вопрос с module.exports или var secondFile = require('\path\secondFile')

+1

Где/как именно вы «распечатываете» значение? – Pointy

+0

на клиенте Я называю эту функцию «PFCloud». Он возвращает объект (независимо от того, что вы ввели в response.success первой функции) или ошибку, если есть ошибка. например, в первом методе, если я жестко задал 'response.success ('yes')' вместо 'response.success (res)' консоль на клиенте выведет «да» в качестве возвращаемого объекта – gadu

+0

В вашем клиенте ни значение ответа показывает или не получает исключение? – ChunTingLin

ответ

0

Я думаю, вы просто неправильно использовать API-интерфейс

Rewrite это на примере стиля. https://parse.com/docs/js/api/classes/Parse.Cloud.html#methods_httpRequest

Parse.Cloud.httpRequest({ 
     method: 'PUT', 
     url: ..., 
     headers: headersForReq, 
     body: bodyForReq 
    }).then(function (httpResponse) { 
      callback(null, 'yes'); // the hardcoded "yes" i referred to 
     }, 
     function (httpResponse) { 
      callback(httpResponse.status + httpResponse.error); 
     } 
    }); 

Я думаю, что ниже будет работать тоже.

Parse.Cloud.httpRequest({ 
     method: 'PUT', 
     url: ..., 
     headers: headersForReq, 
     body: bodyForReq 
    }, { 
     success: function (httpResponse) { 
      callback(null, 'yes'); // the hardcoded "yes" i referred to 
     }, 
     error: function (httpResponse) { 
      callback(httpResponse.status + httpResponse.error); 
     } 
    }); 

BTW, если вы используете синтаксический анализатор с открытым исходным кодом, вы можете использовать запрос или запрос-обещание. Эти 2 пакета npm используются многими людьми. (Parse.Promise не является es6-подобным обещанием)

Смежные вопросы