在jQuery/JavaScript中使用承诺时遇到问题.脚本似乎没有等待

Having trouble using promises in jQuery/JavaScript. Script doesn't seem to wait

本文关键字:脚本 问题 等待 遇到 JavaScript jQuery 承诺      更新时间:2023-09-26

我正在编写一个粒子光子(如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很陌生,但是我一直在阅读大量关于回调和承诺的内容,但一无所获。知道如何做到这一点吗?

您在这里有几个问题。

  1. 您的getVariable()函数需要从 particle.getVariable() 返回承诺。 这将允许getVariable()的调用方对返回的结果使用 .then() 来获取异步结果。

  2. 承诺不会神奇地将异步操作变成同步操作。 因此,您的getVariable()函数仍然是异步的,因为它依赖于异步particle.getVariable()的结果。 因此,您不能直接返回结果。 相反,您应该让它返回一个承诺,并且该函数的调用方可以使用.then()来检索异步结果。

  3. 由于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
});

有关返回异步值的更多说明,您可以看到以下内容:如何从异步调用返回响应?