@TomasGonzalez посмотрите на обновленный ответ

учил это.

const getPrice = function(database){
    return new Promise(function (resolve, reject){
        var promises =[];
        for(var i in database){
            promises.push(Update.requestClassifieds(database[i]))
        }
    Promise.all(promises)
        .then(function(todos){
            return resolve(todos);
        })
})}

Update.prototype.requestClassifieds = function(item){
    var ithis = this;
    return new Promise((resolve, reject) => {
       var input = {};
       request({
           url: '',
           method: "GET",
           json: true,  
           body: input
  }, function (error, response, body){
    if (error){
        return resolve(item);
    }
    else if(body){
        return resolve(item);
    }
  }
});
});
}

Мне нужно запросить данные для каждого элемента в базе данных. Итак, я создал цепочку обещаний для этого.

Я запрашиваю данные API, который имеет 5 секунд перезарядки. Итак, мне нужно подождать 5 секунд до разрешения следующего обещания вPromise.all (обещания).

Как я могу установить время между каждым обещанием в Promise.all?

 Tomas Gonzalez06 окт. 2017 г., 18:48
@Kalamarico Api, который я использую, имеет 5 секунд перезарядки.
 Kalamarico06 окт. 2017 г., 18:17
Это плохая идея, один вопрос, зачем вам 5 секундный отсчет между обещаниями? что-нибудь о доступе к базе данных?

Ответы на вопрос(1)

Решение Вопроса

Вам нужно создатьPromise цепь в вашей петле

const getPrice = function (database) {
    var promisesChain = Promise.resolve(); // Promise chain
    var todos = []; // results to be stored
    for (var i in database) {
        promisesChain = promisesChain.then(((i) => () => { // create closure to grab database[i]
            return Update.requestClassifieds(database[i])
        })(i)).then((res) => {
            return new Promise((resolve, reject) => {
                setTimeout(() => { // store result of requestClassifieds and resolve after 5sec
                    todos.push(res);
                    resolve();
                }, 500);
            });
        })
    }
    return promisesChain.then(() => {return todos});
};

Бегущий пример

const getPrice = function (database) {
	var promisesChain = Promise.resolve();
	var todos = [];
	for (var i in database) {
		promisesChain = promisesChain.then(((i) => () => {
			return Update.requestClassifieds(database[i])
		})(i)).then((res) => {
			return new Promise((resolve, reject) => {
				setTimeout(() => {
					todos.push(res);
					resolve();
          console.log('resolve', res);
				}, 1000);
			});
		})
	}
	return promisesChain.then(() => {return todos});
};
const Update = {};
Update.requestClassifieds = function (i) {
	console.log('got', i);
	return new Promise((resolve, reject) => {
		resolve(i)
	});
}
getPrice({
	a: 'A',
	b : 'B',
	c : 'C'
}).then(console.log);

 ponury-kostek06 окт. 2017 г., 18:54
@TomasGonzalez посмотрите на обновленный ответ
 ponury-kostek06 окт. 2017 г., 18:51
+ ИзменитьpromisesChain.then(function () { console.log(todos); // display results }) вpromisesChain.then(() => {return todos}); такgetPrice вернусьPromise которые решают с массивом результатов
 Tomas Gonzalez06 окт. 2017 г., 18:49
Я думаю, что это лучшее решение. Один вопрос: если я хочу, чтобы getPrice возвращал результаты в виде массива, потому что я хочу их использовать. Просто мне нужно сделать это в "promisesChain.then (function () {console.log (todos); // отобразить результаты})"

Ваш ответ на вопрос