【问题标题】:Meteor synchronous function call on the client客户端上的 Meteor 同步函数调用
【发布时间】:2017-09-22 10:16:51
【问题描述】:

我正在使用 Meteor 和 React,我正在尝试从第三方 javascript 函数返回数据

该函数接受一个回调并返回一个值。该函数需要几秒钟才能解决

此时回调返回一个未定义的值,但几秒钟后控制台日志将显示正确的数据

我目前的代码如下

// ON THE CLIENT
// callback function that returns a deviceId
const callback = function( data ) {

    // this callback fires with the correct data after a couple of seconds
    console.log("Callback ", data);

    return data;
};

// async function that calls third party function with callback
async function getDeviceId() {
    const res = await captureDeviceId(callback);
    return await res;
}

let response = getDeviceId().then( function(value) { 
    return value; 
});

console.log("res", response);

响应返回一个承诺,但没有解决

Return {[[PromiseStatus]]: "pending", [[PromiseValue]]: undefined}

如何在返回值之前等待函数响应? 我试过 Meteor wrapAsync、async-await 和 Promises 都没有成功。

任何帮助将不胜感激

干杯,

【问题讨论】:

  • 欢迎来到 Stack Overflow。尝试同步获取数据会使您的代码更容易,但您应该习惯异步性的概念,并编写适合您的代码。一旦你习惯了它就不会更难,而且你不想在等待几秒钟以等待远程服务响应时锁定网页是有道理的。
  • 感谢您的回复米克尔。不幸的是,我需要返回值才能进入代码中的下一个任务。这是进程中的最后一部分,在获得此值之前,我无法进行最后一次调用。

标签: javascript meteor


【解决方案1】:

getDeviceId 在此处返回一个承诺(即使您在 .then 回调中返回)。如果要获取值,请执行以下操作:

var response;
getDeviceId().then( function(value) { 
    response =  value;
});

【讨论】:

  • 感谢 Faly,现在返回未定义的响应
猜你喜欢
  • 2017-11-19
  • 1970-01-01
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多