2014-12-11 4 views
1

У меня есть облако Clode, похожий на следующий, и «тогда» в «SomeFunction» никогда не будет выполнена:httpRequest.then не вызывался

Parse.Cloud.job('someJobName', function (request, status) { 

    var query = new Parse.Query('User'); 
    query.find().then(function (results) { 
    if (results.length > 0) { 
     Parse.Cloud.httpRequest({ 
     method: 'POST', 
     url: '...', 
     otherStuf: ...,  

     success: function (httpResponse) { 
      var somePromises = []; 
      _.each(results, function (userDataRecord) { 
      somePromises.push(someFunction(userDataRecord)); 
      }); 

      return Parse.Promise.when(somePromises) 
      .then(function() { 
       // Do some more stuff 
      }); 
     }, 
     error: function (httpResponse) { 
      // report error 
     } 
     }); 
    } 
    }); 
}); 


function someFunction(userDataRecord) { 
    var promise = Parse.Promise.as(); 

    promise.then(function() { 
    Parse.Cloud.httpRequest({ 
     url: '....', 
     ..., 
    }).then(function (httpResponse) { 
     // Do something here 
    }); 
    }); 

    return promise; 
} 

Как уже упоминалось выше, моя проблема в том, что «тогда» часть внутри «someFucntion» никогда не вызывается. Я верю, что retrurnes httpRequest перед выполнением этой части, потому что HTTP-вызов делает то, что он предположил, и код, который находится в «// Сделайте еще несколько вещей», выполняется правильно.

Что мне нужно для этого кода, но перед этим необходимо вызывать код внутри 'then' on 'someFunction'.

Я, скорее всего, здесь что-то не так.

EDIT

Я получил его на работу, перемещая 'затем' к самому

function someFunction(userDataRecord) { 
    var promise = Parse.Promise.as(); 

    promise.then(function() { 
    Parse.Cloud.httpRequest({ 
     url: '....', 
     ..., 
    }); 
    }).then(function (httpResponse) { 
     // Do something here 
    }); 

    return promise; 
} 

ответ

0

Parse.Cloud.httpRequest возвращает pomisse обещание, чтобы вы могли переписать someFunction следующим образом:

Parse.Cloud.job('someJobName', function (request, status) { 

    var query = new Parse.Query('User'); 
    return query.find().then(function (results) { 
     if (results.length > 0) { 
      return Parse.Cloud.httpRequest({ 
       method: 'POST', 
       url: '...', 
       otherStuf: "" 
      }).then(function (httpResponse) { 
       var somePromises = []; 
       _.each(results, function (userDataRecord) { 
        somePromises.push(someFunction(userDataRecord)); 
       }); 
       return Parse.Promise.when(somePromises) 
      }).then(function() { 
       // Do some more stuff 

       status.success(); 
       return 
      }, function() { 
       // error 
       status.error(); 
       return 
      }); 
     } 
     status.success() 
    }); 
}); 

function someFunction(userDataRecord) { 
    ... 
    return Parse.Cloud.httpRequest({ 
      url: '....', 
      ... 
     }).then(function (httpResponse) { 
     // Do something here 
     return ... 
    }); 
} 
+0

Благодарим вас за ответ. Я уже пробовал это. «HttpRequest» выполняется, но все, что находится внутри «then», никогда не вызвано. – rmcc

+0

О, не могли бы вы повторить попытку размещения 'return' перед' query.find' и 'Parse.Cloud.httpRequest' в обратном вызове задания? – eth3lbert

+0

Я не думаю, что понял. – rmcc

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