Два основных отличия для примера кода, который вы показали:
Теперь, я думаю, что вы на самом деле хотели сравнить
var example = co.wrap(function *() {
try {
const val = yield aPromise();
doSomethingWith(val);
} catch (err) {
doSomethingWith(err);
}
})
а также
async function example() {
try {
const val = await aPromise();
doSomethingWith(val);
} catch (err) {
doSomethingWith(err);
}
}
и возможно
function example() {
return aPromise().then(doSomethingWith).catch(doSomethingWith);
}
(последний на самом деле имеет другое поведение, если aPromise
бросает синхронно, что, конечно, никогда не должно делать)
Итак, давайте обсудим
производительность
Не имеет значения. Точно нет. Хотя третий может быть самым быстрым, потому что он создает наименьшее количество обещаний, а два других еще не оптимизированы в движках.
удобочитаемость
Выбери сам. Первые два в значительной степени эквивалентны, хотя co
немного уродлив (злоупотребляет синтаксисом генератора). Третий довольно лаконичен, и из-за этого ему можно было бы отдать предпочтение, хотя это преимущество быстро теряется для всего со сложным потоком управления.
управление потоком
Это не вопрос плюсов и минусов, это должно быть то, что вы хотите.
почему следует использовать co или await?
co
больше не следует использовать, он заменен стандартом ES8 (ES2017) async
/await
(который еще не опубликован, но все же). Его все еще можно использовать в качестве цели транспилятора (для сред, поддерживающих ES6, но не ES8) или для обратной совместимости, когда он использовался с чем-то другим, кроме промисов (учитывая, что co поддерживает больше типов «доходных значений»).
person
Bergi
schedule
21.10.2016
aPromise().then()
будет достаточно. :) - person Yury Tarabanko   schedule 04.10.2016await
нигде не реализована и может быть перенесена только примерно в первую версию. Это все равно, что спросить, когда вы будете использовать исходный код или скомпилированный код. - person Amit   schedule 04.10.2016