Есть два основных способа сделать это:
Один из способов - использовать обратные вызовы , то есть передать функцию в качестве параметра функции water
, которая будет вызываться, когдаистекло время ожиданияОбратный вызов - это функция, которая вызывается по требованию после определенной логики.
function plant() { console.log("Plant maize") }
function water(onSuccess) {
setTimeout(function() {
console.log("Water plant")
/* see here we are calling the passed function after we have successfully processed the remaining logic */
if (typeof onSuccess === "function") { onSuccess() }
},3000)
}
function fertilizer() { console.log("Add fertilizer") }
plant()
/* fertilizer function is passed to water function as callback */
water(fertilizer)
Другой способ сделать это - использовать Обещания .Обещанием является контракт, который либо будет выполнен (решен), либо не выполнен (отклонен).Это позволяет пользователю определять отдельную логику, которая будет выполняться после разрешения или отклонения обещания соответственно.
function plant() { console.log("Plant maize") }
function water() {
return new Promise(function (resolve) {
setTimeout(function() {
console.log("Water plant")
/* calling resolve will fulfill the promise */
resolve()
},3000)
})
}
function fertilizer() { console.log("Add fertilizer") }
plant()
/* .then adds a function containing logic which will be executed after promise is fulfilled, so here we pass fertilizer function */
water().then(fertilizer)
Подробнее о Обратные вызовы @ MDN Подробнее о Обещания @ MDN