2017-02-22 3 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), так как я могу объявить обещание и использовать его с разные аргументы?

EDIT: это так, что можно будет перебирать набор значений и каждый раз отправлять разные значения в обещание.

+1

Вы не будете повторно использовать обещания. Вы создаете новые. То, что вы хотите, - это фабрика, создающая обещания, основанные на аргументах, предоставляемых ей. Итак, вам нужна фабричная функция, которая принимает ваши аргументы вокруг обещания, а не внутри. –

+0

О, круто, есть ли фабрика обещаний, которую я могу использовать, не принося угловой или другой библиотеки? @TJ – shinzou

ответ

2

Обещание: не a функция; это «обещанное будущее возвращаемое значение» функции. Таким образом, вы просто напишите функцию, которая принимает эти аргументы и создает новые обещания:

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

Смежные вопросы