JS APIと対話しようとしましたが、Gruntタスクで実行すると失敗します。私の論理は混乱していると思う。私の手順:executor関数から約束を返しますか?
- 彼らが古い場合
- (
check_tokens
)それらをチェックし、ファイルからトークンを取得する - それらをリフレッシュ(refresh_tokens
) - リフレッシュするコールAPIは、失敗した場合 - 新しいもの(
authorize_with_api
)<を取得します - これは
現在の兵卒タスクが報告authorize_with_api
から
authorize_with_api
への呼び出しをコメントアウトすると、それはエラーで正しく終了し、私の最上位のcaught error!
メッセージが表示されます。 executor関数から約束を返せないのはなぜですか?私の論理に何が問題なの?約束解決しない約束コンストラクタ(またはその中の任意の関数)からの復帰
/* 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);
}
});
});
}
'、あなたがそれを渡すことを意味するのですか?これを呼び出すgulpタスクを表示することは役に立ちます –
あなた自身の約束をすることは避けてください。ライブラリはこのタスクを解決するために書かれており、そのうちの1つを使用します。たとえば、ブルーバードはあなたのためにそれを行うことができます。 http://bluebirdjs.com/docs/api/promise.promisifyall.html – Tomalak
@Tomalakさらに詳しく説明できますか? OPはネイティブプロミスを使用していますか? –