gpt4 book ai didi

javascript - 如何在javascript中将异步调用与同步调用结合起来

转载 作者:数据小太阳 更新时间:2023-10-29 05:06:03 25 4
gpt4 key购买 nike

我有点开始学习 javascript 并且有一个关于组契约(Contract)步和异步函数调用的问题。这将只是一个理论问题,但我希望它能传递思想。

假设我们有一个 javascript 程序来决定我需要购买多少香蕉和橙子。

console.log('buy %d bananas and %d oranges', bananas, oranges)

现在,我可以决定我能买多少香蕉,但我需要问我妻子她想要多少橘子,所以我给她发了短信。 (我可以写一个异步函数来表示这个)。

这将是我的直接方法:

var bananas = 10;
var oranges = 0;
textWife('askAboutOranges',function(number){ oranges = number; }
console.log('buy %d bananas and %d oranges', bananas, oranges)

但对我来说这没有意义,因为我必须等待我妻子的回复,所以我可能无法及时得到橙子的数量。

所以我可以将我的程序更改为:

var bananas = 10;
var oranges = 0;
textWife('askAboutOranges',function(number){
oranges = number;
console.log('buy %d bananas and %d oranges', bananas, oranges);
}

但我不喜欢这样,因为现在我有根据我妻子的回复来决定买什么(包括香蕉)的逻辑。如果我决定不想要橘子怎么办,我是否必须这样做:

var bananas = 10;
var oranges = 0;
if (wantOranges)
{
textWife('askAboutOranges',function(number){
oranges = number;
console.log('buy %d bananas and %d oranges', bananas, oranges);
}
}
else
console.log('buy %d bananas and %d oranges', bananas, oranges);

所以我的问题是,任何人都可以向我解释执行此类操作的最佳/正确方法是什么吗?

最佳答案

jQuery Deferred是随身携带的好工具。我可能会做这样的事情来分离关注点:

function decideHowManyBananas() {
return 10;
}

function decideHowManyOranges() {
var deferred = $.Deferred();

if (wantOranges) {
textWife('askAboutOranges', function(number) {
deferred.resolve(number);
});
} else {
deferred.resolve(0);
}

return deferred.promise();
}

$.when(decideHowManyBananas(), decideHowManyOranges()).done(function(bananas, oranges) {
console.log('buy %d bananas and %d oranges', bananas, oranges);
});

关于javascript - 如何在javascript中将异步调用与同步调用结合起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17559207/

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