Pu sh против Pull
Я собираюсь сделать некоторые предположения, учитывая то, как вы задали свой вопрос: Предположение, что никто не объяснил Pu sh v Вытянуть дихотомию. Чрезвычайно важно понять, чтобы решить подобные проблемы в будущем без сообщества SO.
Обещания и обратные вызовы были разработаны органом ECMA, чтобы позволить разработчикам PULL для результатов асинхронных задач. Вы можете думать о PULL -ing как о том, что вы берете трубку и звоните своему другу, спрашивая его, доставлена ли ваша посылка по его адресу, который вы указали в форме доставки. Очевидно, что вы не будете оставаться на вызове, пока не прибудет пакет, поэтому вам постоянно приходится повторять этот процесс, пока ваш друг не скажет: «Да, ваш пакет прибыл» (например, Promise.resolve(package) || cb('package has arrived')
).
Тогда тело ECMA доставило нам ES8. И вместе с этим, методология PU SH, которая решает именно ту проблему, против которой вы бьете свою голову совершенно превосходно, я мог бы добавить. Дихотомия async/await
позволяет разработчику больше не поднимать трубку и не звонить своему другу. Вместо этого ваш друг поднимает трубку, звонит вам и говорит: «Эй, чувак, иди забери свои вещи с моего крыльца, оно пришло». Это PU SH. async/await
& generators
Больше многословия по async/await
теории, если хотите здесь
Решения
function * fetchToken() {
const { auth } = getToken(); // getToken() is asynchronous and BLOCKs control flow until value is returned.
yield auth.token;
}
const tokenGen = fetchToken();
const { value: token } = tokenGen().next();
console.log('token: ', token); // [jwt token]
async function fetchToken() {
const { auth } = await getToken(); // await BLOCK's control flow until the function resolves.
return auth.token;
}
const token = fetchToken();
console.log('token: ', token); // [jwt token]