我创建了一个返回布尔值的Javascript函数。函数中的一行代码调用REST调用。当我编码时,我没有意识到调用将是异步的。所以,基本上,该方法总是返回“假”'当我做类似的事情时:
if(isDataValid()) ...
我可以将调用函数中的操作移动到success函数,但我试图创建一个可重用的方法。我使用jQuery和Everest。我还没有学到任何关于Promises的知识,而且我对回调编程也很陌生。
这是我的方法的简化版本:
function isDataValid(){
// Read data from Local Storage
// Create object from data
// Flag variable to capture result
var isValid = null;
restClient
.read('/my/url', model)
.done(function(response)
{
// 'Good' response, set flag to true
isValid = true;
})
.fail(function(response)
{
// 'Bad' response, set flag to false
isValid = false;
});
return isValid;
}
我应该如何进行异步调用并返回true / false?
答案 0 :(得分:0)
功能应标记为async
,以便在内部使用await
。
由于您没有使用响应,我删除了它。 如果您需要回复,那么
var response = await restClient.read('/my/url/', model);
您应该使用try / catch来处理错误。 结果如下:
async function isDataValid(){
var isValid = null;
try {
await restClient.read('/my/url', model);
isValid = true;
} catch(err) {
isValid = false;
}
return isValid;
}
最后要调用isDataValid
,您还应该在函数调用前使用await
。所以它看起来像那样:
if(await isDataValid()) { ... }
由于await
只能在async
个函数中使用,因此调用isDataValid
的函数也应标记为async
。这样,您应该更新要与await
一起使用的所有函数调用链。