2017-02-22 45 views
0

我想使用帶有參數的承諾,像下面的psudo代碼:重用的承諾與參數

let lookForXPromise = new Promise(arg1. arg2, function(resolve, reject){ 
    asyncFunc(arg1, arg2, function(value){ 
     if(value != "undefined"){ 
     resolve(value); 
     } 
     else{ 
     reject(); // didn't find X 
     } 
    }); 
    }); 

lookForXPromise(1, "foo").then(
    function(val){ ... do something... 
}).catch(){ ... 

但看來,一個承諾只接收function(resolve, reject),所以我怎麼能宣佈一個承諾,並與重用不同的論點?

編輯:這樣就可以遍歷值的集合,每次發送不同的值給承諾。

+1

您不重複承諾。你創造新的。你想要的是一個工廠根據提供給它的參數創建承諾。所以你需要一個工廠函數來接受圍繞諾言的爭論,而不是在裏面 –

+0

哦,很酷,有沒有一個承諾工廠,我可以使用,而無需引入角度或其他庫? @TJ – shinzou

回答

2

一個承諾是不是函數;它是一個函數的「承諾未來返回值」。因此,您只需編寫一個接受這些參數並創建新承諾的函數:

function lookForXPromise(arg1, arg2) { 
    return new Promise(function(resolve, reject){ 
    asyncFunc(arg1, arg2, function(value){ 
     if(value != "undefined"){ 
     resolve(value); 
     } 
     else{ 
     reject(); // didn't find X 
     } 
    }); 
    }); 
} 

// now you can call lookForXPromise as a function: 
lookForXPromise(1, "foo") 
    .then(() => { /* ... */ }) 
    .catch(() => { /* ... */ }); 
+0

我想迭代一個數組,併發送不同的參數,每次... – shinzou

+0

@kuhaku我已經更新和闡述了一下 – Frxstrem

+0

不錯,我現在就試試看,謝謝。 – shinzou