在jQuery/JavaScript中使用承诺时遇到问题.脚本似乎没有等待
Having trouble using promises in jQuery/JavaScript. Script doesn't seem to wait
我正在编写一个粒子光子(如Arduino)。我正在尝试从中调用一个变量,然后使用该变量将.css类添加到div。
问题是变量不断返回
undefined
在初始调用时。但是,如果我在几秒钟后再次调用它,它工作正常。
这是来自 Pparticle 的 API 调用:
particle.getVariable({ deviceId: 'DEVICE_ID', name: 'temp', auth: token }).then(function(data) {
console.log('Device variable retrieved successfully:', data);
}, function(err) {
console.log('An error occurred while getting attrs:', err);
});
这是我的版本:
function getVariable(varName) {
particle.getVariable({ deviceId: device_ID, name: varName, auth: accessToken }).then(function(data) {
return data.body.result;
}, function(err) {
console.log('An error occurred while getting variable:', err);
});
}
我希望能够像这样使用它
$(".class").addClass(getVariable("var")
我对jQuery和Javascript很陌生,但是我一直在阅读大量关于回调和承诺的内容,但一无所获。知道如何做到这一点吗?
您在这里有几个问题。
-
您的
getVariable()
函数需要从particle.getVariable()
返回承诺。 这将允许getVariable()
的调用方对返回的结果使用.then()
来获取异步结果。 -
承诺不会神奇地将异步操作变成同步操作。 因此,您的
getVariable()
函数仍然是异步的,因为它依赖于异步particle.getVariable()
的结果。 因此,您不能直接返回结果。 相反,您应该让它返回一个承诺,并且该函数的调用方可以使用.then()
来检索异步结果。 -
由于
getVariable()
将是异步的,因此您需要使用getVariable(...)
.then(...) 来访问异步结果。
更改为此内容:
function getVariable(varName) {
return particle.getVariable({
deviceId: device_ID,
name: varName,
auth: accessToken
}).then(function (data) {
return data.body.result; // this becomes the fulfilled value of the promise
}, function (err) {
console.log('An error occurred while getting variable:', err);
throw err; // rethrow error so it will propagate
});
}
getVariable("var").then(function (result) {
$(".class").addClass(result);
}, function(err) {
// handle error here
});
有关返回异步值的更多说明,您可以看到以下内容:如何从异步调用返回响应?
相关文章:
- Google 日历 API V3 会解决与会者和创建者 Java 脚本问题
- JQuery脚本问题
- 脚本问题,获胜'Don’不允许我跑步和使用
- Jquery表单验证脚本问题
- 修复跨站点脚本问题
- Javascript随机名称猜测者:无响应的脚本问题
- 平滑滚动脚本问题
- Tumblr 无限(无休止)滚动/自动页面脚本问题
- 简单的 Java 脚本问题
- Javascript 触发 Tropo 脚本问题
- 跨站点脚本问题
- 切换脚本问题
- 将 HTML 源代码注入 iframe 以避免跨站点脚本问题
- PhantomJS页面转储脚本问题
- 如何在js字符串中修复这个从右到左的脚本问题
- IE7 CPU峰值,脚本问题&调试
- iMacros脚本问题timeout/errormsg/popupignore等
- 无法在未定义的脚本问题上调用方法替换
- NPM脚本问题
- 带有Microsoft边缘的windows 10应用程序中的内联脚本问题