gpt4 book ai didi

Javascript promise 深入堆栈

转载 作者:行者123 更新时间:2023-12-02 16:02:26 25 4
gpt4 key购买 nike

我决定在创建模型时对服务器进行回退调用,以防我们无法从本地可用信息中找到值。如果可能的话,我想让它异步,这是否意味着我必须让这个代码链中的所有内容消耗并返回 promise ?

我将首先使用伪代码来说明这一点,因为调用堆栈可能有点长,因此我们不会包含与此问题无关的内容。如果您需要更多内容,请告诉我。

function router() {
if (condition) {
controller.renderDocument(options);
}
}

controller.renderDocument(options) {
documentCollection.findOrCreateDocumentHolder(options);
}

documentCollection.findOrCreateDocumentHolder(options) {
var model = this.findOrCreateDocument(options);
}

documentCollection.otherFunction(options) {
// just to illustrate that there's several entry points to this kind of functionality
var model = this.findOrCreateDocument(options);
}

documentCollection.findOrCreateDocument(options) {
if (!options.type)
options.type = resolveType(options);
// other things that use the found options.type
return model;
}

resolveType(options) {
var locallyResolved = resolveLocally(options);
if (locallyResolved)
return locallyResolved;
// try the server as a fallback
var serverResolved = resolveFromServer(options.id);
return serverResolved;
}

resolveLocally(options) {
return stuff;
}

resolveFromServer(id) {
return ajaxRequestResult();
}

显然,实际的代码有点长,而且确实做了一些事情。

为了 1 个可能的 ajax 请求而使用所有这些链接 promise 感觉有点过分,特别是因为这种情况很少发生。另一种选择是仅发出同步 AJAX 请求。

我唯一的选择是让一切都使用 Promise 和 Whens,还是使其成为同步 AJAX 请求?有更好的选择吗?我正在考虑 C# 的 wait 关键字,但我确信其他语言也有类似的功能。

最佳答案

I want to have it async if possible, does it mean I have to make everything in this chain of code consume and return promises?

是的。潜在异步的东西必须始终返回一个 promise ,并且必须始终像异步一样使用(无论如何 promise 都会强制执行此操作)。

Is the only other alternative to just make a synchronous AJAX request?

是的,你真的不希望这样。

Is there a nicer alternative? I'm thinking of C#'s await keyword, but I'm sure other languages have similar functionality.

事实上,async-await is coming to ECMAScript以及。但它并不使任何东西同步,它只是无处不在的 Promise 的语法糖。

关于Javascript promise 深入堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31072272/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com