как оформить параметр в новом обещании? - PullRequest
0 голосов
/ 28 августа 2018

Я только что узнал об обещаниях и асинхронности / ожидании. Я хочу, чтобы моя функция ожидала, пока какая-то функция завершится, прежде чем продолжить. В принципе, я думаю, это должно выглядеть примерно так:

async function doSomething(data){
//some code
await createMarkup(data)
//do some stuff which must wait for createMarkup to finish
}

function createMarkup(input){
return new Promise ((???) => {
//some code
resolve(markup)
})
}

Теперь, в большинстве уроков, которые я читал об обещаниях и прочем, параметром "нового обещания" всегда было "(разрешить, отклонить)". Это было так часто, что я задавался вопросом, является ли это какой-то необходимостью?

В моем случае обещание должно принимать ровно один аргумент. Так что я могу просто, как и в любом другом параметре, ввести свой единственный аргумент в параметр, и это все? Или я должен позаботиться о чем-нибудь? ^^

1 Ответ

0 голосов
/ 28 августа 2018

В моем случае обещание должно содержать ровно один аргумент.

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

Функция, которую вы передаете обещанию, получит два аргумента. Они передаются им при вызове, что делается библиотекой Promise (которая не является кодом, который вы написали, и следует спецификации для Promises, так что это не что-то под вашим контролем). Традиционно называть их resolve и reject, но вы можете называть их как хотите. Передаваемая вами функция должна вызывать resolve(any_data) в случае успеха и reject(any_data) в случае сбоя. Если вы не собираетесь вызывать reject, то вам не нужно указывать это в списке аргументов, хотя второй аргумент будет передан функции.

Вы можете создать функцию, которая возвращает обещание (например, createMarkup в вашем примере), которое принимает любые понравившиеся аргументы и делает их доступными для функции, которую вы передаете Promise через замыкания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...