require('x-promise'); //расширяем стандартные промисы
/данная функция вернет промис, который зарезолвится со значением 'test' через 1 секунду
function test() {
return new Promise(resolve => {
setTimeout(resolve, 1000, 'test');
});
}
var test2 = Promise.coroutine(function*() {
var t = yield test(); //ждем завершения test не блокируя поток, результат сохраняем в t
t = t.split('').join('.'); //этот код выполнится только после того как await вернет свое значение и сохранит его в t
return t; //хоть и возвращаем строку, но функция вернет промис
});
//тестим
test2().then(result => {
console.log(result); // 't.e.s.t'
});
//данная функция вернет промис, который зарезолвится со значением 'test' через 1 секунду
function test() {
return new Promise(resolve => {
setTimeout(resolve, 1000, 'test');
});
}
async function test2() {
var t = await test(); //ждем завершения test не блокируя поток, результат сохраняем в t
t = t.split('').join('.'); //этот код выполнится только после того как await вернет свое значение и сохранит его в t
return t; //хоть и возвращаем строку, но функция вернет промис
}
//тестим
test2().then(result => {
console.log(result); // 't.e.s.t'
});
Замечу что данный код можно запустить только прогнав через babel с пресетом stage-3 promise.then( ... ).then( ... ).then( ... )