无法访问返回的承诺中的拒绝参数



我无法访问从这个延迟返回的拒绝。我认为这可能是因为这个函数是嵌套的,我必须在其他地方放置一个返回拒绝。请指教。谢谢。

我希望在这里使用拒绝值:

    $.search(boxes).then(function(results) {
      console.log(results, "place_results length: ", public.place_results.length);
      // public.showPlaces();
    }), function(error) {
      console.log("failed search");
      console.log(error);
    };

$.search = function (boxes) {
      function findNextPlaces(place_results, searchIndex) {
          var dfd = $.Deferred();
          if (searchIndex < boxes.length) {
              // service.nearbySearch({
              service.radarSearch({
                  bounds: boxes[searchIndex],
                  // types: ["food"]
                  keyword: ["coffee"],
                  // rankBy: google.maps.places.RankBy.DISTANCE
              }, function (results, status) {
                  if (status != google.maps.places.PlacesServiceStatus.OK  && status === 'OVER_QUERY_LIMIT') {
                      failed_Queries.push(boxes[searchIndex]);
                      console.log("failed!: boxes:",searchIndex, failed_Queries);
                      // dfd.reject("Request["+searchIndex+"] failed: "+status);
                      return dfd.reject("failed").promise();
                  }
                  if (status != 'OVER_QUERY_LIMIT'){
                    console.log(status);
                    console.log( "bounds["+searchIndex+"] returns "+results.length+" results" );
                    for (var i = 0, result; result = results[i]; i++) {
                        var marker = createMarker(result);
                        public.place_results.push(result.reference); // marker?
                        $(document).trigger('test', result.reference);
                    }                    
                  }
                  dfd.resolve(public.place_results, searchIndex+1);
              });
                return timeDelay(1000).then(function() {
                        return dfd.then(findNextPlaces);                        
                      });
            }
          else {
            return dfd.resolve(public.place_results).promise();
          }
      }
    return findNextPlaces(public.place_results, 0);
  }
$.search(boxes).then(function(results) {
    …
}), function(error) {
    …
};

这是一个语法错误 - 你想要

$.search(boxes).then(function(results) {
    …
}, function(error) {
    …
});

return dfd.reject("failed").promise();

是一个风格问题 - 您无法从回调中return任何内容,并且您不需要在此处.promise()。写起来可能更好

dfd.reject("failed");
return;