我是AngularJS $ q的新手并承诺,我知道如果我使用#include <QApplication> // <== this is important
#include <QQmlApplicationEngine>
#include <QDebug> // <= with the intention of testing
#include <QScreen> // <== this is important
#include <QDesktopWidget> // <==
#include <QQmlContext>
#include "globalcontrolclass.h"
int main(int argc, char *argv[]){
QApplication app(argc, argv);
QQmlApplicationEngine engine;
GlobalControlClass controlGlobal;
QRect z = qApp->desktop()->screenGeometry();
controlGlobal.setWindowHeight(z.height());
controlGlobal.setWindowWidth(z.width());
qDebug()<<"Window Dip-> H:"<<controlGlobal.windowHeight()<<"W:"<<controlGlobal.windowWidth();
if(z.height()<=0 || z.width()<=0){
qDebug()<<"Error al obtener tamaño de la pantalla.\nNo se puede continuar asi.";
return false;
}
engine.rootContext()->setContextProperty("ControlGlobal", &controlGlobal);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
,我可以得到一个承诺,我可以使用它的$http.get()
函数链接
.then
然后每个人都会返回一个新的承诺,但我的问题是我怎么知道然后已经解决了?我注意到的一件事是,如果我添加返回$http.get(url)
.then(function(data){}, function(err){})
.then(function(data){}, function(err){})
.....
,那么下一个函数可以从之前的函数获得返回值,那么这是否意味着我需要给出一个返回作为解析?
答案 0 :(得分:1)
我怎么知道那时候已经解决了?
正如您所注意到的,then()
返回的承诺在执行回调后解析(在第一个承诺完成时执行)。它确实解决了回调的结果。
我是否需要给予回报作为决心?
不,如果您没有return
来自回调的任何内容,结果就是undefined
- 就像常规函数调用一样。
但是,实际上你有更多选项来构建回调中的结果而不是返回一个普通值:
return
另一个承诺。 then()
返回的承诺将采用它,即履行其结果或在其结算后立即拒绝理由。throw
例外。它将自动被捕获,并且因此错误而拒绝生成的承诺。答案 1 :(得分:0)
当第一个then
的回调执行时,初始承诺已经解决,但您可以像您描述的那样链接thens
。
每个then
调用都会创建一个新的派生承诺。如果从then
回调中返回具体值,则将使用该值解析派生的承诺。您将能够在随后的then
回调
serviceCall().then(function(){})//nothing returned => resolves with undefined value
.then(function(){return 10;})//will resolves with the value 10
.then(function(data){//data is 10 here
});
基本上没有必要手动解决承诺。你也可以调用像其他$ http请求一样返回promises的外部函数。
serviceCall().then(function(){
return $http.get('/get-customer-from-server');//returns customer
})
.then(function(customer){
//the customer is available here
})
为简洁起见,我省略了错误回调。如果任何承诺被拒绝,将执行错误回调,这很可能是由于某处的失败。错误处理有一个简写符号。您可以使用catch
serviceCall().then(function(){
})
.catch(function(){//error handling if promise was rejected
})
catch是.then(null,function(){});
此处有更多信息:http://www.syntaxsuccess.com/viewarticle/angular-promise-chaining-explained