I want to do something like the following:
delay( 2500 )
.then( function () { console.log( "Step 1 done" ) } )
.then( delay( 7500 ) )
.then( function () { console.log( "Step 2 done" ) } );
Run Code Online (Sandbox Code Playgroud)
So implementation of delay has been demonstrated many times before:
function delay( ms ) {
var deferred = Q.defer();
setTimeout( deferred.resolve, ms );
return deferred.promise;
}
Run Code Online (Sandbox Code Playgroud)
But if I run the above in node.js I get:
... delay of 2500ms
Step 1 …Run Code Online (Sandbox Code Playgroud) 我在一个项目中使用Q,而我正在使用bower来管理我的JS依赖项.我在bower.json中包含了Q 2.0.0和bower
"dependencies" : {
"q": "~2.0.0"
}
Run Code Online (Sandbox Code Playgroud)
在我的index.html中,我将Q包含在脚本标记中
<script src="bower_components/q/q.js"></script>
Run Code Online (Sandbox Code Playgroud)
当我加载页面时,我在控制台中看到:
未捕获的ReferenceError:require未定义q.js:43
q.js的第43行:
require("collections/shim");
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?我应该使用Browserify或require.js来实现这一点吗?我希望只需使用标签就可以访问该库.
在promise库Q中,您可以执行以下操作来按顺序链接promise:
var items = ['one', 'two', 'three'];
var chain = Q();
items.forEach(function (el) {
chain = chain.then(foo(el));
});
return chain;
Run Code Online (Sandbox Code Playgroud)
但是,以下内容不适用于$ q:
var items = ['one', 'two', 'three'];
var chain = $q();
items.forEach(function (el) {
chain = chain.then(foo(el));
});
return chain;
Run Code Online (Sandbox Code Playgroud) 有人可以告诉我,如果使用错误回调与catch函数之间存在差异$q.promise吗?
例如两个代码片段在功能上是等价的吗?
function doSomething0() {
var deferred = $q.defer();
...
return deferred.promise;
}
doSomething0()
.then(doSomething1)
.then(doSomething2)
.then(doSomething3)
.catch(function (err) {
// do something with `err`
});
Run Code Online (Sandbox Code Playgroud)
与
function doSomething0() {
var deferred = $q.defer();
...
return deferred.promise;
}
function errorHandler(err) {
// do something with `err`
}
doSomething0()
.then(doSomething1, errorHandler)
.then(doSomething2, errorHandler)
.then(doSomething3, errorHandler);
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么要使用第二个呢?在我看来,它看起来更加丑陋并导致更多的代码重复?
我想制作独立的Web应用程序.我有一些SpringBoot的问题.
我的应用程序是SpringBoot的一个jar文件.
但我的应用程序通常需要jdbc驱动程序jar.我想为我的应用程序排除jdbc驱动程序jar.我想从lib文件夹中读取库jar.
但是SpringBoot的lib文件夹BOOT-INF/lib是final static.
所以,我想为jdbc驱动程序jar添加外部类路径(lib).
如何在SpringBoot中配置其他类路径.是可用的么?
我正在使用Q进入promises模式,我在控制台中不断收到警告"[Q]未处理的拒绝原因(应该是空的)".我做错了什么?
function load(url) {
var deferred = Q.defer();
$.ajax({
type: "GET",
processData: false,
dataType: "html",
url: url,
cache: false
}).done(function (response, status, xhr) {
deferred.reject(new Error("test error"));
return;
}).fail(function (xhr, status, error) {
deferred.reject(new Error("ajax failed"));
return;
});
return deferred.promise;
}
load("http://fiddle.jshell.net")
.then(function (result) {
console.log("got result", typeof(result));
})
.catch(function (error) {
console.log("got error", error);
return true;
})
.done();
Run Code Online (Sandbox Code Playgroud) 我使用支持Promise规范的Q库.但我也尝试使用不久前在Chrome中实现的Promise类(实验性的).
Q中的延迟函数可用于创建未履行的承诺,可以在将来解决或拒绝.
我使用Chrome中提供的原生Promise实现了相同的功能.这是一个例子:
var defer = function() {
var result = {};
result.promise = new Promise(function(resolve, reject) {
result.resolve = function(value) {
resolve(value);
};
result.reject = function(value) {
reject(value);
};
});
return result;
};
var deferred = defer();
deferred.promise.then(function(value) {
alert(value);
});
deferred.resolve(10);
Run Code Online (Sandbox Code Playgroud)
我很好奇这个解决方案中存在任何设计缺陷,例如性能下降或不正确.
如何Promise使用Q库创建JavaScript 的递归链?以下代码无法在Chrome中完成:
<html>
<script src="q.js" type="text/javascript"></script>
<script type="text/javascript">
//Don't keep track of a promises stack for debugging
//Reduces memory usage when recursing promises
Q.longStackJumpLimit = 0;
function do_stuff(count) {
if (count==1000000) {
return;
}
if (count%10000 == 0){
console.log( count );
}
return Q.delay(1).then(function() {
return do_stuff(count+1);
});
}
do_stuff(0)
.then(function() {
console.log("Done");
});
</script>
</html>
Run Code Online (Sandbox Code Playgroud) 如何将2013-06-24转换为2013年6月24日?我使用以下代码.
date1="2013-06-24";
SimpleDateFormat d= new SimpleDateFormat("dd MMM yyyy");
try{
date2 = d.parse(date1);
}catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
但我收到此错误"java.text.ParseException:Unparseable date:"2013-06-24"(在偏移4处)"
在过去的3天里,我一直在我的头上撞墙.
我正在使用sailsjs和捆绑的水线ORM.我想一个接一个地运行数据库调用.我知道我可以通过嵌套"then"调用来做到这一点,但它只是看起来不对.
我已经多次查看了Q文档和教程,但我仍然没有得到如何连接并从现有的Promises中依次点击"then"调用:(
我想要:
我的代码看起来像
var mail = 'test@test.com';
Users.create({email:mail, name:''}).then(console.log).fail(console.log);
Actions.create({actionID:123})
.then(function(error, action){
Users.findOneByEmail(mail).then(function(person){
person.actions.add(action.id);
person.save(console.log);
}).fail(console.log)
});
Users.update({email:mail},{name:'Brian'}).exec(console.log);
Actions.update({actionID:123},{now:'running'}).exec(console.log);
Run Code Online (Sandbox Code Playgroud)
正如你从代码中看到的那样,我一直在使用exec然后混合:P
我认为方法是连接Users.create(...).然后 - > Action.create(...).然后 - > Users.findOneByEmail(...).然后 - >*和更新.
非常感谢任何帮助
q ×10
javascript ×4
promise ×4
angularjs ×2
android ×1
bower ×1
chaining ×1
external ×1
java ×1
memory-leaks ×1
orm ×1
recursion ×1
sails.js ×1
sequential ×1
spring ×1
spring-boot ×1
waterline ×1