Ignorando los errores AJAX con promises array y $ .when

Tengo el siguiente código que obtiene el JSON de una variedad de identificadores de video de YouTube. Funciona muy bien cuando todos los videos existen y la consulta es exitosa. Envía varias solicitudes getJSON, y cuando todas están hechas ... el$ .when.done () dispara y puedo procesar los datos resultantes.

var
  results  = {},
  promises = [];

$(document).ready(function() {

  var
    vids = [
    'ozj2-bnTL3s',
    'EAZ4Tlt8MQ4',
    'Xn9o7cxqVoA'
    // ,'this-videoid-doesnot-exists'
  ],
  url = 'http://gdata.youtube.com/feeds/api/videos/{{vid}}?v=2&alt=json';

  $.each(vids, function(idx, vid){
    var
      u = url.replace('{{vid}}', vids[idx]),
      p = null;

    p = $.getJSON( u ).done(function(data) {
      results[vid] = data.entry;
    });

    promises.push(p);
  });

  $.when.apply($, promises).done(function(){
    console.log(results);
  });

});

Pero ... En la aplicación final no controlo si todos los videos todavía existen en YouTube, me di cuenta de que a veces uno (o varios) de los videos en la lista pueden haberse eliminado ... o la identificación que Lo que obtengo de la base de datos es incorrecto.

¿Hay alguna manera de que pueda agregar de manera segura a la variable de resultados solo los videos que cuando un apagón exitoso activa el $ .when.fail ()? y esperando que todas las consultas hayan terminado ...

Quiero decir, mi objetivo final es obtener los datos de los videos que existen (aquellos en los que sus datos se recuperaron con éxito) y, de alguna manera, ignorar aquellos que no existen o que no están disponibles ... y no entiendo bien ahora como hacerlo.

Cualquier idea / enfoque será apreciada. TIA!
Puedes encontrar el código eneste JSFiddle

Respuestas a la pregunta(2)

Su respuesta a la pregunta