Этот сценарий использования состоит из трех этапов:
1. Сделайте вызов API, чтобы проверить, существует ли запись
2.Если запись существует, спросите пользователя, хотят ли они добавить ее в группу.
3.Если пользователь нажимает «ОК» на отображаемом модале, где мы его просим, продолжите с другим запросом сети.
Я пытаюсь получить пользовательский ввод, используя модальное подтверждение, написанное в пользовательском компоненте, и на основании того, что пользователь нажимает кнопку «ОК» или «Отмена», я хочу сделать сетевой запрос.
Я не могу получить доступ к функции разрешения обещаний, даже если я назначил ее переменной, доступной для обработчика onClick.
Я уже пытался получить доступ к функции разрешения обещаний в обработчике onClick кнопки, которую нажимает пользователь. Оказывается, не определено.
getUserResponse отправляется в качестве аргумента другой функции, которая существует в отдельном файле JS, где выполняются все сетевые вызовы. Он вызывается после того, как запись была найдена в результате вызова API
let outsideResolve;
const getUserResponse = async () => {
return await new Promise((resolve, reject) => {
outsideResolve = resolve;
});
};
const confirmAddRecord = event => {
event.preventDefault();
//resolve the promise after the button click
outsideResolve(); //error: outsideResolve is not a function
};
return (
<div>
<p>Record Exists would you like to add them to the group?</p>
<button onClick={confirmAddRecord}>Add Existing record !</button>
</div>
);
*********************************
in another file (networkCalls.js), getUserResponse is sent
as an argument to a method called in the file summarized above
try {
let userResponse = await getUserResponse();
console.log(userResponse);
//Do more stuff after the reply comes in
} catch (error) {
console.log(error);
}
Я создал codeSandbox, чтобы воссоздать проблему более подробно:
https://codesandbox.io/s/promisemodal-tke67