使用我的shell.js中的 Durandal SPA :
function activate() {
datacontext.getUser(user);
return datacontext
.primeData()
.then(boot)
.fail(failedInitialization); //return for durandal
}
boot ()函数取决于datacontext.getUser(user)的结果。
我想在激活之前获取用户凭据。如果primeData()没有做太多(目前):
var primeData = function() {
return Q.all([]);
};
然后boot()没有从数据上下文中得到结果:
var getUser = function(userObservable) {
userObservable();
var options =
{
url: 'api/user',
type: 'GET',
datatype: 'json'
};
return $.ajax(options).then(queryOk).fail(queryNotOk);
function queryOk(data) {
userObservable(model.user(data));
}
function queryNotOk(data, textStatus) {
...
}
};
问题是:如何使用 Q 而不是 jQuery 的$.when().done():
$.when(datacontext.getUser(user)).done(function() {
return datacontext
.primeData()
.then(boot)
.fail(failedInitialization);
});