2016-12-11 6 views
0

Я использую библиотеку javascript с api.Как создать функцию, которая возвращает обещание от функции обратного вызова

libapi.callnetwork(arg1,callback(data){ 
//handle data 
} 

тогда я создать сервисную функцию для вызова API как этого

myFunction():Promise<any>{ 
    libapi.callnetwork(arg1,callback(data){ 
    return new Promise(resolve=>resolve(data)); 
    }) 
} 

MYFUNCTION получит ошибку, потому что он должен вернуть обещание или объявить недействительными. Как я могу создать функцию, которая возвращает обещание от этого api?

ответ

8

Идея заключается в том, чтобы не создавать и возвращать обещание внутри обратного вызова, но для его создания во внешней функции (где вы можете return это) и только решительность обещание от обратного вызова:

myFunction():Promise<any>{ 
    return new Promise(resolve => { 
    libapi.callnetwork(arg1, callback(data){ 
     resolve(data); 
    }); 
    }); 
} 

или просто

myFunction():Promise<any>{ 
    return new Promise(resolve => { 
    libapi.callnetwork(arg1, resolve); 
    }); 
} 
-1
myFunction():Promise<any>{ 
    let resolveFn = (data) => data; 
    libapi.callnetwork(arg1, resolveFn); 
    return new Promise(resolveFn); 
} 
0

Vanilla, захватите функция Resolve

let myFunction =() => { 
    let resolve; 
    let promise = new Promise(r => resolve = r); 
    libapi.callnetwork(arg1, resolve); 
    return promise; 
}; 
+1

Нет. Не делайте этого. Вот почему отсрочка устарела. – Bergi

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