我正在编写粒子光子(如 Arduino)。我试图从中调用一个变量,然后使用该变量将 .css 类添加到 div。
问题是变量不断返回为
undefined
在初次通话时。但是,如果我几秒钟后再次调用它,它就可以正常工作。
这是来自 Particle 的 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 还很陌生,但我已经阅读了大量有关回调和 promise 的内容,但一无所获。知道如何实现这一点吗?
最佳答案
您遇到了几个问题。
您的
getVariable()
函数需要从article.getVariable()
返回 Promise。这将允许getVariable()
的调用者对返回的结果使用.then()
来获取异步结果。Promise 不会神奇地将异步操作变成同步操作。因此,您的
getVariable()
函数仍然是异步的,因为它依赖于异步的article.getVariable()
的结果。所以,你不能直接返回结果。相反,您应该让它返回一个 Promise,并且该函数的调用者可以使用.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
});
有关返回异步值的更多说明,您可以查看:How do I return the response from an asynchronous call?
关于javascript - 在 jQuery/JavaScript 中使用 Promise 时遇到问题。脚本似乎没有等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38363441/