gpt4 book ai didi

javascript - 从异步或同步 JavaScript 请求返回值

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:02:26 29 4
gpt4 key购买 nike

下面的函数首先进行同步比较test == 0,如果通过则返回一些内容,如果不通过则进行异步请求。我的目的是让后者返回一些其他内容,例如“来自帖子回调的内容”,但我知道我做错了。不把Ajax请求改成同步的,可以吗?

var value = function (test) {
if (test == 0) {
return 'value is zero ';
} else {
return $.post('/echo/html/', {
html: 'false ',
delay: .5
}, function (r1) {
console.log('r1', r1);
return 'something from post callback';
})
.done(function (r2) {
console.log('r2', r2);
return 'something from done callback';
});
}
}(1);

console.log(value);

https://jsfiddle.net/o5kq8he6/2/

最佳答案

既然您已经从 ajax 调用中返回一个 promise ,那么从您的同步比较中,只需返回一个已解决的 promise 。然后,两个代码路径都返回使用终端值解析的 promise ,调用者可以使用相同的代码来处理结果,无论它在内部以何种方式工作。对于有时同步有时异步的代码,这是一种常见的设计模式。

var myFunc = function (test) {
if (test == 0) {
return $.Deferred().resolve('value is zero ');
} else {
return $.post('/echo/html/', {
html: 'false ',
delay: .5
}).then(function (r2) {
console.log('r2', r2);
// this will be the return value of the promise
return 'something from ajax finished';
});
}
};

myFunc(1).then(function(value) {
// value is here either way
});

仅供引用,在您的 $.post() 中同时使用成功处理程序函数和 .done() 处理程序是没有意义的。如果您要从函数返回一个 promise (这是我的建议),那么您应该只使用 promise 处理程序,而不是成功回调。

您可能还需要了解,从 ajax 调用的成功处理程序返回值没有任何用处。该返回值只是返回到 ajax 基础结构的异步内部,并且永远不会被任何东西使用。

关于javascript - 从异步或同步 JavaScript 请求返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29779492/

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