Конечно, есть много таких подходов, как синхронный запрос, обещание, но из моего опыта я думаю, что вы должны использовать подход обратного вызова. Естественно, что асинхронное поведение Javascript. Итак, ваш фрагмент кода можно переписать немного иначе:
function foo() {
var result;
$.ajax({
url: '...',
success: function(response) {
myCallback(response);
}
});
return result;
}
function myCallback(response) {
// Does something.
}
Используйте CELLFUN
%# find empty cells
emptyCells = cellfun(@isempty,a);
%# remove empty cells
a(emptyCells) = [];
Примечание: a(i)==[]
не будет работать. Если вы хотите узнать, пуста ли i-я ячейка, вам нужно использовать фигурные скобки для доступа к содержимому ячейки. Кроме того, ==[]
оценивает значение пустым вместо true
/ false
, поэтому вместо этого вы должны использовать команду isempty
. Короче: a(i)==[]
следует переписать как isempty(a{i})
.
Все вышеупомянутые ответы неверны, потому что в моем случае, когда я их использовал, они удалили пустые ячейки, а затем все элементы массива ячеек располагались последовательно, вместо сохранения их фактической формы. Фактически, после использования такого подхода ваши элементы массива ячеек имеют тенденцию быть вектором ячейки строки.
Я нашел этот подход, который работает корректно в моем случае.
source: https://groups.google.com/forum/#!topic/comp.softsys.matlab/p3NX0fI6u90
подход:
myCellARRAY(all(cellfun(@isempty,myCellARRAY),2), : ) = [];