Apa*_*tus 3 javascript https asynchronous request node.js
我想编写一个从API请求令牌的应用程序。只要此令牌不可用,我就不想继续应用程序的其余部分。因此,它必须像同步HTTP请求一样。
我的目标是创建一个执行请求的函数,然后返回令牌,例如:
var token=getToken(); //After this function has finished
makeRequest(token); //I want this function to be executed
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
它根本不想同步。拥抱回调的力量:
function getToken(callback) {
//get the token here
callback(token);
};
getToken(function(token){
makeRequest(token);
});
Run Code Online (Sandbox Code Playgroud)
这样可以确保在getToken完成之前不执行makeRequest。
我的目标是创建一个执行请求的函数,然后返回令牌
您不能使函数返回没有立即返回的值。您只能退还诺言。
然后在代码的其他部分,您可以使用then处理程序来等待诺言的实现,或者可以使用类似以下内容的代码:
var token = await getToken();
Run Code Online (Sandbox Code Playgroud)
异步函数内部以等待该值可用,但前提是该getToken()
函数返回一个Promise。
例如,使用该request-promise
模块将类似于:
var rp = require('request-promise');
function getToken() {
// this returns a promise:
return rp('http://www.example.com/some/path');
})
Run Code Online (Sandbox Code Playgroud)
然后是其他一些功能:
function otherFunction() {
getToken().then(token => {
// you have your token here
}).catch(err => {
// you have some error
});
}
Run Code Online (Sandbox Code Playgroud)
或者,async function
像这样:
async function someFunction() {
try {
var token = await getToken();
// you have your token here
} catch (err) {
// you have some error
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅:https://www.npmjs.com/package/request-promise
请注意,async function
并且await
是在ECMAScript 2017草案(ECMA-262)中定义的,在撰写本文时(截至2017年3月),该草案尚未定稿(将于2017年6月发布)。
但自v7.6起,它已在Node中可用(如果使用该--harmony
标志,则自v7.0起已可用)。有关与Node版本的兼容性,请参见:
如果你想为老年人节点版本略有不同的语法类似的功能,你可以像使用模块共同或Promise.coroutine从蓝鸟。
归档时间: |
|
查看次数: |
13386 次 |
最近记录: |