как правильно в промисе использовать функции
Доброго времени суток,
затертый до дыр вопрос выполнить одну функцию после другой. Очевидный путь - за промис, однако вызов функции такого вида func(arg)() не работает. let myPromise = new Promise ( (resolve, reject) => { firstFunction(param)(); resolve(); } ); myPromise.then(secondFunction(param)()); Но, secondFunction не ждёт зараза первую. Если поставить таймаут, то всё ОК: firstFunction(param)(); setTimeout(secondFunction(param)(), 2000); обе функции возвращают анонимную: function firstFunction(param) { return () => { ... } } Есть идеи как заставить работать? |
Цитата:
|
А какая разница что все, что один промис? Не работает именно при использовании func(arg)()
|
atanov,
может так? myPromise.then(secondFunction(param)); |
destus, не, тогда вызов второй функции не сработает. Вру, срабатывает, но всё равно не ждёт.
|
myPromise.then(() => secondFunction(param)()); бинго? |
destus, не, так тоже не срабатывает. Если без возврата анонимной функции, то всё замечательно работает, а вот с анонимной никак. А нужно, для передачи аргумента...
|
Похоже это у меня баг, вот этот пример работает нормально:
let myPromise = new Promise ( (resolve, reject) => { let a = firstFunction(3000000000)(); console.log(a); resolve(); } ); myPromise.then(secondFunction(25)); function firstFunction(param) { return () => { let i; for(i = 0; i < param; i++) { } return i; } } function secondFunction(param) { return () => { console.log(param); } } |
function one(value) { console.log(value) } new Promise((res, rej) => { res('supervalue') }) .then(one) // здесь one это ссылка на ф-цию // это можно переписать по другому .then(valueFromPromise => one(valueFromPromise)) или еще вариант, ) не понятен смысл зачем это надо... function one(value) { console.log('one', value) return Promise.resolve(value) } function anonymous(twentyFive, value) { return new Promise((res, rej) => { res(() => { console.log('anonymous', twentyFive, value) }) }) } async function job() { const anonymousInstance = await new Promise((res, rej) => { res('supervalue') }) .then(one) // здесь one это ссылка на ф-цию // supervalue // это можно переписать по другому .then(valueFromPromise => one(valueFromPromise)) .then(anonymous.bind(null, 25)) // curring - вроде бы %) .then(anonymousFoo => anonymousFoo()) } job() function one(value) { console.log('one', value) return Promise.resolve(value) } function anonymous(twentyFive) { return value => { console.log('anonymous', twentyFive, value) } } new Promise((res, rej) => { res('supervalue') }) .then(one) // здесь one это ссылка на ф-цию // supervalue // это можно переписать по другому .then(valueFromPromise => one(valueFromPromise)) .then(anonymous.bind(null, 25)()) // curring - вроде бы %) function one(value) { console.log('one', value) return Promise.resolve(value) } function anonymous(twentyFive) { return value => { console.log('anonymous', twentyFive, value) } } new Promise((res, rej) => { res('supervalue') }) .then(one) .then(anonymous.call(null, 25)) |
SuperZen,
да не, всё ок с промисами, просто у меня "руки не из того места...":cray: |
Часовой пояс GMT +3, время: 15:03. |