gpt4 book ai didi

javascript - 递延/ promise 相互依赖

转载 作者:行者123 更新时间:2023-11-29 15:15:19 25 4
gpt4 key购买 nike

我想实现 Deferred/Promise 的依赖调用。问题是我不明白如何逐步调用包含异步调用的处理程序数组,例如

我有全局对象:

var options = {
additionalHandler: []
main : null
}

然后添加main函数和handlers,添加强顺序的,也需要按这个顺序调用

options.main = function(that, data){
var that = this; //Todo: fix this should be button
//Do some staff
}

var dialog = $(somedialog).dialog({
autoOpen: false,
modal: true,
buttons: {
"OK": function() {
//There is the place where i have wait user answer to invoke innerDeferred.resolve(true) that is have to affected on global Deferred
$(this).dialog("close");
}
},
close: function () {
//innerDeferred.resolve(false);
}
});

options.additionalHandler.push(function(){
dialog.dialog("open");
})

比起单击按钮时,我运行/等待所有处理程序,然后如果所有处理程序都返回 true,则执行主函数

$("#someButton").on("click", function () {
var self = this;
if(typeof options !== "undefined"){
var deferred = $.Deferred();
if (options.additionalHandler && options.additionalHandler.length) // if we do not have(collect) any handlers we don't ran it all
{
$(options.additionalHandler).each(function () {
if (typeof this !== "undefined" && typeof this === "function") {
deferred.then(this( /*??? deferred or innerDeferred */));
}
});
}
deferred.done(function (def) {
if(def) // if all steps from all inner steps return true
options.main(self , someData));
});
}
}

这意味着我有一个主处理程序依赖于可能不存在的其他处理程序答案(如果不存在我们就转到主处理程序),问题是如何实现对应该运行步骤的异步内部延迟调用结果的依赖-by-step(我们例子中的对话框等待用户回答并转到另一个对话框或可能的 ajax 调用)。

更新 1:

从上到下这是伪实现(代码)并且也不起作用

这是如何工作的(必填):

user => add some itemp to backet
backet <= knows about some discount if user purchase 2 items and register new pop-up that says if you add 2 you'll have 50% sale.
user => add another item to backet
backet <= this item will not available till next week, register another pop-up.
user = > push Order
Order => (pop-up) Discount if 2 do you (Yes-break /No -continue) => Item available on next week will wait ( Yes - continue/ No- break) => if (all.Continue) => push Order.

一切都像瀑布一样工作,我看不到延迟/ promise 的优点/缺点

最佳答案

代码中有几个问题。

您的 deferred 变量仍然引用原始的 Deferred ,它是空的,您需要在每次添加回调时更新您的 deferred .

deferred = deferred.then(this( /*??? deferred or innerDeferred */));

您在 done 方法中检查 true,您需要确保所有回调都返回 true(至少最后一个)。

如果您正在使用 async 回调,请确保它们返回返回 true 的 deffered 实例。

最后,您传递给 options.main 的第一个参数并不重要,因为您正在方法中覆盖它。

关于javascript - 递延/ promise 相互依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49925513/

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