gpt4 book ai didi

javascript - Q promise 带下划线 .find()

转载 作者:行者123 更新时间:2023-11-29 10:41:14 24 4
gpt4 key购买 nike

我试图在 Q promise 的上下文中使用 _.find()。

我的问题似乎是因为我的谓词函数包含对异步(节点式)函数的调用。

这是我的代码:

var IsAlreadyQueued = function() {
return Q.ninvoke(kueSearcher, 'delayed')
.then(function(ids) {
return Q(_.find(ids, function(id) {
// return true; // This works
kue.Job.get(id, function(err, job) {
if (job.type === 'jobtype') {
return true;
}
});

}));
});
};

所以正如我在代码的注释中所说,如果我执行 return true; 而不是调用 kue.Job.get() 它会起作用。

你能看出我在 promise 中使用 _.find() 有什么问题吗?

非常感谢您的帮助。

最佳答案

不,您不能使用 _.find 或任何其他带有异步回调的同步迭代方法 - 它 doesn't work with filter任何一个。您目前正在尝试 return from an asynchronous callback ,这是行不通的。

您首先需要编写一个异步find 函数:

function find(arr, predicate, i) {
i = i >>> 0;
if (i >= arr.length)
return Q.resolve(null);
return predicate(arr[i], i).then(function(m) {
return m ? arr[i] : find(arr, predicate, i+1);
});
}

然后你可以重写你自己的方法:

function isAlreadyQueued() {
return Q.ninvoke(kueSearcher, 'delayed')
.then(function(ids) {
return find(ids, function(id) {
return Q.npost(kue.Job, "get", id)
.then(function(job) { return job.type === 'jobtype'; });
});
});
}

关于javascript - Q promise 带下划线 .find(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28729046/

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