एक जेएस एपीआई के साथ बातचीत करने की कोशिश कर रहा है, लेकिन यह एक ग्रंट कार्य द्वारा चलाए जाने में विफल रहता है; मुझे लगता है कि मेरा तर्क उलझन में है। मेरे कदम: फ़ाइल सेएक निष्पादक समारोह से एक वादा वापस?
- प्राप्त टोकन, उन्हें चेक (
check_tokens
) - अगर वे पुराने हैं - उन्हें ताज़ा (
refresh_tokens
) - कॉल एपीआई ताज़ा करने के लिए, अगर विफल रहता है - नए लोगों को मिलता है (
authorize_with_api
) < - इस मुद्देauthorize_with_api
से - त्रुटि के साथ अस्वीकार या टोकन के साथ हल
वर्तमान में ग्रंट कार्य एकरिपोर्ट हैऔर कभी पूरा नहीं होता है। अगर मैं authorize_with_api
पर कॉल पर टिप्पणी करता हूं तो यह एक त्रुटि के साथ ठीक से बाहर निकलता है, और मुझे अपना शीर्ष caught error!
संदेश मुद्रित किया जाता है।
मैं निष्पादक कार्य से कोई वादा क्यों नहीं कर सकता? मेरे तर्क के साथ क्या गलत है?
/* global sdk, config, tokens */
return getTokens().then((p_tokens) => {
tokens = p_tokens;
return check_tokens(tokens);
}).then((tokens) => {
console.log('then() is called!');
}).catch((err) => {
console.error('caught error!', err);
});
function check_tokens(tokens) {
if(are_old(tokens)) { // returns true
return refresh_tokens(tokens);
}
return Promise.resolve(tokens);
}
function refresh_tokens(tokens) {
return new Promise(function(resolve, reject) {
sdk.refreshTokens(tokens.refresh_token, function(err, new_tokens) {
if(err) {
if(error.code === 'invalid_grant') {
return authorize_with_api();
}
reject('refreshTokens failed');
} else if(newTokens) {
resolve(new_tokens);
}
});
});
}
function authorize_with_api() {
return new Promise(function(resolve, reject) {
sdk.getTokens(config.auth_code, function(err, tokens) {
if(err) {
reject('getTokens failed');
} else if(tokens) {
resolve(tokens);
}
});
});
}
'' tokens' authorize_with_api 'अंदर अपरिभाषित किया जा रहा है, तो आप में इसे पारित करने के मतलब था? यह आपके गल्प कार्य को दिखा रहा है जो इसे कॉल कर सकता है उपयोगी हो सकता है –
कृपया अपना खुद का प्रचार करने से बचें। इस कार्य को हल करने के लिए पुस्तकालयों को लिखा गया है, उनमें से एक का उपयोग करें। उदाहरण के लिए, ब्लूबर्ड आपके लिए यह कर सकता है। http://bluebirdjs.com/docs/api/promise.promisifyall.html – Tomalak
@ टोमालक क्या आप आगे समझा सकते हैं? ओपी देशी वादे का उपयोग कर रहा है? –