Подобие Sleep в execute, Vk api

Vk api метод execute
Как риалезиравать часть кода ( //ожидать 2сек). Программа должна проверить не появился ли новый пост на свет. execute не поддерживается создание функций.

var posts = API.wall.get({“count”: 1,“owner_id”:-143352091,“offset”:1});
var post = posts.items[0];
var id=post .id; //Получаем id поста до задержки

//ожидать 2сек

var posts_2 = API.wall.get({“count”: 1,“owner_id”:-143352091,“offset”:1});
var post_2 = posts_2.items[0];
var id_2=post_2.id; //Получаем id поста после задержки
var text_2=post_2.text;

if (id !=id_2) {
return {“text”: text_2};
} else{return {“text”: null};
};

Модель того как работает js отличается от модели выполнения PHP. Чтобы выполнить какой-то код через время, нужно обернуть код в функцию, и запланировать выполнение этой функции.

Например ниже код выполнится через 1 секунуду.

setTimeout(function () {
	alert(1)
}, 1000)

Тот же подход с оборачиванием кода в функцию используется когда нужно получить значение, которое не доступно сразу же при выполнении функции. Это твой случай. Код из функции, переданной в checkNewPost выполнится когда-то в будущем. В том будущем когда сама checkNewPost будет готова вызвать коллбек и передать в него результат своего выполнения.

checkNewPost(function(res) {
	if (res.text) {
		console.log(res.text)
	}
})

Теперь само решение. Получаем значение поста, через 2 секунды, получаем еще один пост, и после этого вызываем коллбек, куда передаем результат анализа: есть пост или нет. Выше был пример как эта функция будет использоваться.

function checkNewPost(callback) {
	var posts = API.wall.get({
		count: 1,
		owner_id: -143352091,
		offset: 1
	});
	var post = posts.items[0];
	var id = post.id; //Получаем id поста до задержки

	//ожидать 2сек
	setTimeout(function () {
		var posts_2 = API.wall.get({
			count: 1,
			owner_id: -143352091,
			offset: 1
		});
		var post_2 = posts_2.items[0];
		var id_2 = post_2.id; //Получаем id поста после задержки
		var text_2 = post_2.text;

		if (id != id_2) {
			callback({
				text: text_2
			})
		} else {
			callback({
				text: null
			})
		};
	}, 2000)
}
1 лайк