Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.08.2016, 13:46
Аватар для Spirtikys
Аспирант
Отправить личное сообщение для Spirtikys Посмотреть профиль Найти все сообщения от Spirtikys
 
Регистрация: 30.12.2015
Сообщений: 49

Задать порядок выполнения промисов
Добрый день.

Подскажите, как можно задать порядок при выполнении промисов.
Допустим, есть такой вот код
function generate() {
    let ms = Math.round(Math.random() * 1000);

    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(ms);
        }, ms);
    });
}

for (let i = 0; i < 3; i++) {
    Promise.all([generate(), generate(), generate()])
        .then(value => log(value, i));
}


Сейчас в цикле создается 3 промиса и выводятся они в порядке кто первый отработал. А как задать им последовательность?
Ответить с цитированием
  #2 (permalink)  
Старый 28.08.2016, 13:51
Аватар для Spirtikys
Аспирант
Отправить личное сообщение для Spirtikys Посмотреть профиль Найти все сообщения от Spirtikys
 
Регистрация: 30.12.2015
Сообщений: 49

И еще, глупый вопрос, но все таки.

function generate(ms) {
    let number;

    setTimeout( () => {
        number = Math.round( Math.random() * 10 );
    }, ms);

    return number;
}


Как присвоить number асинхронно значение и вернуть его при выполнении функции generate ?
Ответить с цитированием
  #3 (permalink)  
Старый 28.08.2016, 14:02
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Цитата:
cейчас в цикле создается 3 промиса и выводятся они в порядке кто первый отработал. А как задать им последовательность?
function generate() {
    let ms = Math.round(Math.random() * 1000);

    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(ms);
        }, ms);
    });
}
let chain = generate();

for (let i = 0; i < 3; i++) {
    chain = chain.then(value => {
		console.log(value, i);
		return generate()
	});
}
Ответить с цитированием
  #4 (permalink)  
Старый 28.08.2016, 14:06
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Цитата:
Как присвоить number асинхронно значение и вернуть его при выполнении функции generate ?
function generate(ms) {
return new Promise((resolve, reject) => {
    let number;

    setTimeout( () => {
        number = Math.round( Math.random() * 10 );
		resolve(number);
    }, ms);

})
}

generate(300).then(console.log);
Ответить с цитированием
  #5 (permalink)  
Старый 28.08.2016, 15:38
Аватар для Spirtikys
Аспирант
Отправить личное сообщение для Spirtikys Посмотреть профиль Найти все сообщения от Spirtikys
 
Регистрация: 30.12.2015
Сообщений: 49

Сообщение от destus Посмотреть сообщение
function generate(ms) {
return new Promise((resolve, reject) => {
    let number;

    setTimeout( () => {
        number = Math.round( Math.random() * 10 );
		resolve(number);
    }, ms);

})
}

generate(300).then(console.log);
Спасибо большое. Совсем забыл про чейнинг в первой части =/ Хотя не совсем то, что я хотел, так как генерировать хочу больше одного значения на выходе.
Во второй части, хотел бы уточнить, через промисы проблем это не вызвало, а как сделать без него и не вынося наверх интервал? Возможно ли это? Сугубо в своих интересах так сказать, чтобы лучше понять язык.

Последний раз редактировалось Spirtikys, 28.08.2016 в 15:42.
Ответить с цитированием
  #6 (permalink)  
Старый 28.08.2016, 16:27
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

Spirtikys,
Pub/sub. Но зачем, если есть промисы, бабель и полифилл?
Ответить с цитированием
  #7 (permalink)  
Старый 28.08.2016, 21:23
Аватар для Spirtikys
Аспирант
Отправить личное сообщение для Spirtikys Посмотреть профиль Найти все сообщения от Spirtikys
 
Регистрация: 30.12.2015
Сообщений: 49

Сообщение от destus Посмотреть сообщение
Spirtikys,
Pub/sub. Но зачем, если есть промисы, бабель и полифилл?
Как я писал выше, это "научный" интерес) В целом да, вы правы, велосипед не к месту придумывать, но, интересно.
Можете рассказать по подробнее о pub\sub ?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Порядок выполнения Userscript Pieel Javascript под браузер 0 06.07.2015 21:07
Порядок выполнения функций YaVolodya jQuery 1 02.11.2013 03:42
как в datepicker задать диапазон дат во время выполнения скрипта. Yurik jQuery 0 23.02.2011 12:19
Порядок выполнения анимации Tohin jQuery 3 03.07.2009 11:52
Порядок выполнения команд shooretz jQuery 2 23.06.2009 18:13