Я думаю, что есть более простые способы сделать это, чем приостановить выполнение функции.Я понимаю, что вы хотели бы сделать, и есть способы написать это асинхронно, позволяющие вам делать то, что вы хотите.
Вот очень простой пример того, что вы описываете в одном процессе.Предполагается, что signUp
будет вызвано, когда пользователь попытается зарегистрироваться.Затем вызывается sendVerificationCode
, что, как я полагаю, заставляет Twilio отправить пользователю код.userData
хранится в памяти (для этого также можно использовать базу данных) в database.pendingUsers
.Мы можем указать ожидающих пользователей по номеру телефона, который они дали для регистрации.На этом функция signUp
заканчивается.
Я предполагаю, что следующим шагом для пользователя будет как-то ввести код в качестве ввода в нашу программу.Когда пользователь отправляет код обратно в наш скрипт (эта часть зависит от вас - никаких подробностей о http, командной строке и т. Д. Не было предоставлено), мы можем вызвать verifyCode
.Когда вызывается verifyCode
, нам нужен номер телефона (я не могу предложить, как его получить, не зная, как пользователь взаимодействует с этим кодом).Мы можем проверить код, который мы дали с Twilio, и, если он действителен, взять данные пользователя из pendingUsers
и сохранить его до users
.Вы можете использовать базу данных для этого, и в этом случае ваш код будет выглядеть по-другому, но логика будет похожа.
Вот пример кода:
const database = {
pendingUsers: {},
users: {},
};
signUp(userData){
database.pendingUsers[userData.phone] = userData;
sendVerificationCode(userData.phone);
}
sendVerificationCode(phone) {
// send a request to twilio which then sends an SMS to the user
}
verifyCode(message) {
// you need to get a hold of the phone number this verification code is for
const phone = message.from;
// send a request to twilio with the code and the response
// is whether the code is valid
const verified = ...; // verify code
if (!verified) {
return false;
}
const userData = database.pendingUsers[phone];
if (userData) {
// remove from pending
delete database.pendingUsers[phone];
// save user
database.users.push(userData);
}
}