gpt4 book ai didi

javascript - 难以包装 javascript 行为并将其保留以备后用

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

我正在使用 javascript 进行编程并使用 Promises,现在正在使用 Q.js。我终于明白了自己在做什么,但在特定行为上遇到了困难。

我有一种情况,我将相当相似的代码重复了几次。它基本上是这样的......

{
// start
var deferred = Q.defer();

// do something {
deferred.resolve();
}

return deferred.promise;
}

好吧,这一切都很好,但每次都重复所有这一切让人很烦,所以我试图把它包起来。这只是一个示例,它不是整个 javascript 文件,因为大多数其他部分都不相关。

{
var list = [];
queue = function(f) {
var deferred = Q.defer();
list.push(f(deferred));
return deferred.promise;
}

{
queue(function(deferred){
// do some work
// we want the deferred here so we can resolve it at the correct time
deferred.resolve();
});
}
}

问题是我不希望它在我排队时立即运行。我基本上想构建列表,然后再运行它。我正在使用 Q.js

中的 reduce 函数运行列表
{
return list.reduce(function(i, f) {
return i.then(f);
}, Q());
}

但这有点违背我的目标,因为我真的不打算在它们排队的同时运行它们。有没有一种方法可以保存执行以备后用,并且仍然通过函数传递延迟的对象?

更新

我被问到我期望代码做什么,这是一个公平的问题。我会尽力解释。这样做的目的是拆分逻辑,因为我使用的是 ASP.NET MVC,所以我有 _Layout 页面,然后是普通 View - 所以有这样的逻辑在其他事情完成之前不能运行,但有时是在每页的基础上。这种方法就是为了解决这个问题而设计的。

基本上它是这样工作的......

加载器.js

由于缺乏更好的术语或当前的实现,这是一个全局对象。我计划最终改变这一点,但一步一步来。

{
var Loader = {};
var list = [];

initialize = function() {
Q().then(step1).then(step2).then(process).then(finalStep);
};

queue = function(f) {
// push the given function to the list
};

process = function() {
return list.reduce(function(i,f){
return i.then(f);
}, Q());
};

step1 = function() { // generic example
// create a promise
return deferred.promise;
}; // other steps are similar to this.

return Loader;
}

_布局

<head>
@RenderSection("scripts", false)
<script type="text/javascript">
// we have the loader object already
Loader.initialize();
</script>
</head>

索引

@section Scripts {
<script type="text/javascript">
Loader.promise(function(deferred){
// do something here.
deferred.resolve();
}));
</script>
}

最佳答案

你可以使用闭包。

queue(function(deferred) {
return function() {
// this is the actual function that will be run,
// but it will have access to the deferred variable
deferred.resolve();
};
});

关于javascript - 难以包装 javascript 行为并将其保留以备后用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24639189/

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