Подобный ответ, но более вероятно идиоматический для ES6:
const a = Promise.resolve(1);
const b = Promise.reject(new Error(2));
const c = Promise.resolve(3);
Promise.all([a, b, c].map(p => p.catch(e => e)))
.then(results => console.log(results)) // 1,Error: 2,3
.catch(e => console.log(e));
const console = { log: msg => div.innerHTML += msg + "<br>"};
<div id="div"></div>
В зависимости от типа (ов) возвращаемых значений , ошибки часто можно различить достаточно легко (например, используйте undefined
для «не заботьтесь», typeof
для простых значений без объекта, result.message
, result.toString().startsWith("Error:")
и т. д.)
Проблема, с которой вы столкнулись, заключается в том, что первый случай - это инициализация , а второй случай - это присвоение , и вы не можете назначить массив.
Однако вы можете инициализировать структуру без явной инициализации всех членов. Это делается с помощью обозначенного инициализатора .
struct transform {
double A[4][4];
int b;
char *c;
};
struct transform t = { .A = {{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0},{0, 0, 0, 0}}, .b = 5 };
Любое поле, не инициализированное в явном виде, - это implicity, инициализируемое в 0 или NULL, в зависимости от типа.
Нет фундаментальной причины, по которой компилятор C не может быть спроектирован так, чтобы он мог понять, что вы имели в виду. Просто так получилось, что C позволяет вам использовать инициализацию только в определенных случаях, и это не один из них.