if/else 块与返回和 ajax 承诺



我有一个看起来像这样的if/else块:

if (this.getSessionStorageData()) {
this.initialData(this.getSessionStorageData());
} else if (this.shouldPerformXHR) {
this.loadXHRData();
}

我想扩展这个块,可以选择将其创建为 switch 语句,也许有点像这样:

let data = [];
if (this.getSessionStorageData()) {
data = this.getSessionStorageData();
} else if (this.shouldPerformXHR) {
data = this.loadXHRData();
}
return data;

loadXHRData是 AJAX 请求。我在这个例子中猜测,如果shouldPerformXHR为真,数据将在 AJAX 请求完成之前返回。

现在 XHR 请求实际上是一个承诺,所以我可以接听电话并使用then但我的会话存储数据没有使用承诺。

有什么方法可以像我的第二个示例一样拥有相同的数据结构,但有我的承诺还是这是不可能的?

我想要一种方法来简单地使用任何必要的策略(ajax、会话等)返回数据。但目前看起来我被迫从 ajax 请求的.then子句中设置我的数据,这导致我到处都有逻辑。

希望这是有道理的,如果没有,请问。

同步解析异步调用将不起作用。因此,your data = this.loadXHRData();将无法以这种方式运作。

这意味着您的函数应该返回一些内容以由您的被调用方解析,因为您的 AJAX 调用无法在此处内解析

因此,我们可以返回一个 Promise,它解析this.getSessionStorageData();返回的值:

if (this.getSessionStorageData()) {
return Promise.resolve(this.initialData(this.getSessionStorageData()));  // Will return a new Promise which is then-able.
} else if (this.shouldPerformXHR) {
return this.loadXHRData();
}

您的被叫方应通过以下方式解决此承诺:

myFunction().then(function(data) {
// do stuff with the data
});

最新更新