【问题标题】:Typescript and async calls打字稿和异步调用
【发布时间】:2020-03-01 09:26:48
【问题描述】:

我正在使用 TypeScript,我想对休息服务进行异步调用。

我想确保在继续之前完成其余的通话。

我已将这段代码“拼凑”在一起,但我不确定它是否正确或完成这项任务的最佳方式。

任何人都可以看看并提供反馈吗?我只是在删除一条记录,我想返回一个布尔值,指示调用是否成功。

提前致谢

async SubmitRESTRequest() {

            var response: boolean;

            await new Promise(next => {

                try {
                    var promise = $.ajax({
                        url: 'https://mywebsite/deleteperson/1',                                                
                        type: 'DELETE'
                    }).then(function (data) {
                        response = true;
                    }).done(function (data) {
                        next();                        
                    }).fail(function (data) {
                        response = false;
                        next();
                    });
                }
                catch (err) {
                    response = false;
                    next();
                }
            });

            return response;

        }

我通过以下代码调用代码

var wardResponse:Boolean = await SubmitRESTRequest();

【问题讨论】:

  • 当你运行它时会发生什么——它有效吗?如果它不起作用,请描述什么不起作用。谢谢。
  • 您的代码可以简化为:var result = $.ajax({ url, type: 'delete' }).then(() => true).catch(() => false)。其中 90% 是多余的。

标签: typescript asynchronous promise


【解决方案1】:

$.ajax 返回的值与您可以await 的承诺非常接近。通过在Promise 构造函数中包装promise-oid,您正在做一堆不必要的事情(并使用反模式),并且您几乎完全违背了使用async/await 的目的。

试试这个。它更干净,应该至少和你那里的一样好用:

async SubmitRESTRequest() {
  try {
    await $.ajax({
      url: 'https://mywebsite/deleteperson/1',
      type: 'DELETE'
    });
    return true;
  } catch (e) {
    return false;
  }
}

【讨论】:

    猜你喜欢
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2018-05-25
    • 2018-05-10
    • 2019-03-25
    • 1970-01-01
    相关资源
    最近更新 更多