javascript-带下划线.find()的Q许诺
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-带下划线.find()的Q许诺,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1165字,纯文字阅读大概需要2分钟。
内容图文
我试图在Q承诺的上下文中使用_.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;
}
});
}));
});
};
因此,正如我在代码注释中所说的那样,如果我确实返回true;而不是调用kue.Job.get().
您能看到我在诺言中使用_.find()有什么问题吗?
非常感谢你的帮助.
解决方法:
不,您不能将_.find或任何其他同步迭代方法与异步回调一起使用-要么为doesn’t work with filter,要么为doesn’t work with filter.您当前尝试使用return from an asynchronous callback,但无法正常工作.
您首先需要编写一个异步查找功能:
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-带下划线.find()的Q许诺全部内容,希望文章能够帮你解决javascript-带下划线.find()的Q许诺所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。