как правильно в промисе использовать функции
Доброго времени суток,
затертый до дыр вопрос выполнить одну функцию после другой. Очевидный путь - за промис, однако вызов функции такого вида 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, время: 01:06. |