如何使Javascript等待一个函数完成然后再移至另一个函数?

时间:2019-06-18 15:52:15

标签: javascript

我对Java语言还很陌生,我需要帮助使我的代码在继续执行下一个功能之前先等待函数完成。在我的代码中,我正在使用SES发送电子邮件,并且正在SNS中发布主题。

发送电子邮件并发布主题后,我需要将用户导航到“谢谢”页面。

关于我的代码设置方式,这非常不一致。有时它会发送电子邮件并在导航之前发布,有时它会先做一个,然后再导航。我需要帮助您了解如何使代码等待这两个功能完成,然后再导航到另一个页面。

谢谢大家!

我尝试使用if语句,但是没有按照我的想法工作。

sns.publish(snsParams, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);           // successful response
});
ses.sendEmail(sesParams, function(err, data) {
    if (err) console.log(err, err.stack); // an error occurred
    else     console.log(data);           // successful response
});
window.location = 'https://abc123.com/contact/thanks/';

1 个答案:

答案 0 :(得分:0)

您可以通过将第二个呼叫用作第一个呼叫的回叫或使这些呼叫分散化来实现:

using (var connection = new NpgsqlConnection(_connectionString))
            {
                connection.Open();

                var result = await connection.QueryAsync<dynamic>(
                   @"SELECT 
                    (SELECT COUNT(Id) FROM public.Units WHERE UserId=@userId)
                        AS NumberOfUnits,
                        COUNT(*) AS MeasurementsRecieved
                        FROM public.Units
                        INNER JOIN public.Sensors
                        ON public.Units.Id = public.Sensors.UnitId
                        INNER JOIN public.Measurements ON public.Sensors.Id = public.Measurements.SensorId WHERE public.Units.UserId=@userId"
                        , new { userId }
                    );
                connection.Close();

                if (result == null)
                    throw new KeyNotFoundException();

                return result;
            }