我想在nodejs中使用expressjs和angular 2來執行回調函數(我不知道它是否與angular2部分相關)。如何處理nodejs中的Promise
我的工作是: 我在angular2中有一個formular,我發送一個get請求到我的API路由,然後我通過get發送公式中的文本字段到URL,然後我做一個MYSQL查詢查看電話簿數據庫,我期望從電話簿中獲得完整用戶的詳細信息。
表現公式:
<div class="container">
<div class="col-md-4">
<h1>Addressbook</h1>
<form [formGroup]="searchForm" (ngSubmit)="doSearch($event)">
<input formControlName="searchString" type="text" placeholder="Name">
<button type="submit">Search</button>
</form>
</div>
</div>
第一功能,doSearch:
doSearch(event) {
let formData = this.searchForm.value;
var searchString = this.searchForm.value.searchString;
this.http.get('/phonebook/search/'+searchString, function(req, res){}).subscribe(
function(response) {
console.log("Success Response");
},
function(error) { console.log("Error happened" + error)},
function() { console.log("the subscription is completed")}
);
}
這要求在發送參數的路線,所以不用這麼辛苦。
現在創建路由器進入遊戲:
public static create(router: Router, basePath: string) {
console.log("[SearchRoute::create] Creating routes for /search.");
// call the function for retrieving the address book results
router.get(basePath + "/search/:searchString", (req: Request, res: Response, next: NextFunction) => {
console.log("## [SearchRoute] Called GET /search.");
var object = searchUser(req);
console.log(object);
});
}
最後,功能searchUser被調用:
function searchUser(req: Request) {
console.log("searchUser Function executed.");
var searchString = req.params.searchString;
var query = p_query('SELECT XXXX')
.then(function (results) {
console.log("query executed and all okay");
return (results);
})
.catch(function (error) {
console.error("Wooopsi", error);
});
console.log("query result: "+query);
}
此外,我張貼在這裏,我打造成爲新的查詢功能能夠處理承諾(我不知道它是否是最佳選擇):
function p_query(q) {
return new Promise(function (resolve, reject) {
// The Promise constructor should catch any errors thrown on
// this tick. Alternately, try/catch and reject(err) on catch.
myMYSQL.db.query(
q,
function (error, results) {
if (error)
reject(error);
resolve(results);
});
})
};
因此,我真正想做什麼,我的問題是什麼?
我想要查詢的結果返回給客戶端(angular2表現公式),我是不是能夠做到這一點......
在此之後很長的帖子所以,我很感激,如果你直到這裏讀完,併爲複雜的問題感到抱歉!
PS:我知道我解釋自己真的不好:(
問候, 丹尼爾
是承諾使用是必要的嗎? –
可能不是在這種情況下,但我有另一種功能的情況下,我需要做一個查詢,取決於第一個查詢的結果(在第一個查詢中,我查找客戶端ID,並使用該客戶端ID在第二個查詢中),當我將它們放在同一個代碼塊中時,它們會同時執行,而第二個查詢失敗(因爲會先執行),所以對於這種情況可能不會,但我真的很想使用它 – DaRo
where是你的例子您的路由器定義中的res.json(object)?然後在您的doSearch中,您必須處理收到的數據,例如response.body? – Myonara