2016-03-01 65 views
-1

我在嘗試構建一個node.js SDK來與我無法控制的API接口。我使用節點http模塊發送請求和ES6承諾,這些承諾將在這些請求完成並已用數據響應時解決。當承諾解決時通知

import Request from './Request' 
 

 
class Interface { 
 
    constructor(endpoint = 'localhost', port = 5015, async = false) { 
 
    this.endpoint = endpoint; 
 
    this.port = port; 
 
    this.sessionCookie = null; 
 
    this.queue = []; 
 
    } 
 

 
    sessionStart(analystId, password) { 
 
    let response = this.request('session', 'analystLogon', { 
 
     userId: analystId, 
 
     password: password 
 
    }).then; 
 
    response((res) => { //Resolve the promise 
 
     this.sessionCookie = res; 
 
     }) 
 
     .catch((err) => console.error(err)); 
 

 
    } 
 

 
    request(service, method, params = {}) { 
 
    let request = new Request(service, method, params); 
 
    //place this request in the queue 
 
    request = request.sendRequest(this.endpoint, this.port, this.sessionCookie); //Returns a promise 
 
    return request 
 
    } 
 
} 
 

 
export 
 
default Interface

我想避免是具有使用功能。那麼最終用戶。我希望這一切都是透明的。我的想法是將每個請求放入隊列中,並在解決問題後對其執行操作。我需要某種方式通知他們已經解決,但我不知道該怎麼做。

+3

「*我想避免的是最終用戶不得不使用.then函數*」 - 這是不可能的。你正在返回一個承諾,並且調用者必須使用'then'。這就是它的工作原理,這就是它的原理。在做異步事情時你不能真正避免它 – Bergi

+1

你的'sessionStart'方法很奇怪。您不能將'then'方法分配給'response'並在稍後沒有上下文的情況下調用它。 – Bergi

+0

呵呵,我真的希望有某種方式可以將每個承諾放入數組中,並在解決時得到通知,並讓程序解決隊列中的下一個承諾。但如果不是這樣的話。 – richbai90

回答

-1

你可以在你的代碼中做一些事情,例如在承諾解析中發出一個事件。類似...

promise.then(function(response) { 
    EmitEvent("success", response); 
}) 

最終用戶會聽取成功事件。順便說一句,我的事件代碼是由編寫的,但你明白了。那裏有許多節點事件包可用。拿你的選擇。