javascript - 我想知道在执行下一行代码之前如何等待返回函数发送数据
问题描述
我的代码(Node.js)有点问题。我想要 2 个文件 app.js 和 state.js,我基本上创建了这两个文件来尝试解决我遇到的问题。
在第二个文件“State.js”上,我有一个返回对象的函数,我将返回延迟了 10 秒(印象中的互联网速度很慢等)。我正在尝试检索 app.js 文件中的对象。但目前,它不起作用。我尝试使用 promise (async & await) 但在终端上返回错误,我还尝试运行 setInterval 来监视变量 i 用于检索对象以仅在它有数据时执行,但这不起作用也是。请尽快帮助我。
下面是 2 场景的代码示例。
============================ state.js 文件=================== ====
function test(val){
setTimeout(() => {
return {
code: 0,
value: val
}
}, 10000);
}
module.exports = test;
=========================== app.js文件(使用promise方式)============== ===============
async function runNow(){
let v = await t('some string');
console.log(v.value)
}
runNow();
================================== app.js(使用区间方法)======= ===
function runNow(){
let engine = setInterval(() => {
let v = t('some string');
if(v === null || v === undefined){
console.log(v);
}else{
clearInterval(engine);
console.log(v.value);
}
}, 5000);
// console.log(v.value);
}
runNow();
解决方案
您必须使用承诺或回调来完成您想要在这里做的事情。
如果我从它的功能中返回一些东西,callback
实际上 setTimeout(callback, time)
并没有被功能返回setTimeout
。
的实现setTimeout
可能类似于这样的东西。
function setTimeout(callback, time, ...args) {
// After the given time it executes the callback
callback(...args);
}
state.js 文件的期望实现如下所示:
function testWithPromise(val) {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
code: 0,
value: val,
});
}, 5000);
});
}
function testWithCallback(val, callback) {
setTimeout(() => {
callback({
code: 0,
value: val,
});
}, 3000);
}
// export the function
// use it in other modules as
testWithCallback("callback_approach", console.log);
testWithPromise("promise_approach").then(console.log);
// or with an async function
async function getValue() {
const value = await testWithPromise("async_promise");
console.log(value);
}
//getValue();
推荐阅读
- python - 如何检查一个列表的元素是否在另一个列表中(列表大小不同)
- swift - osx DDMathParser - 在字符串中查找函数标记
- node.js - 如何更好地优化我的网站?(PageSpeed Insights)
- javascript - 警告:路径必须是路径名 + 搜索 + 哈希,而不是完整的 UR - react js
- c++ - gcc-8 -Wstringop-truncation 有什么好的做法?
- r - 在 R 中使用 ggplot
- javascript - 想要设置显示/隐藏脚本默认可见
- ruby - Ruby - 带有变量的 Hash.Select
- twitter-bootstrap - 引导设计
- sum - DAX 中的总和