node.js - nodejs函数的返回值
问题描述
请帮帮我,我有一个脚本
export function GetKey(inn, res) {
try {
const body = {
7709798583: {
name: 'someName',
key: '123'
},
7718266352: {
name: 'otherName',
key: '123'
}
};
res(body[inn]['key']);
} catch (err) {
res('0000000000000');
}
};
在其他文件中,我尝试使用此功能
GetKey(param, (name) => {
console.log(name);
});
没关系。但我需要将回调返回给参数。如何?
var param = GetKey(param, (name) => {
return name;
});
不正确并返回未定义
解决方案
回调不是这样工作的。Promise
不过,您可以使用和 async-await 语法来伪造该行为。
如果您想编写您的代码,您需要将其余逻辑放在一个函数中并将其直接传递给您的回调:
var param = ''
var allYourLogic = name => {
// YOUR LOGIC
param = name
}
GetKey(param, allYourLogic);
或者您可以简单地内联您的逻辑:
GetKey(param, (name) => {
param = name
// YOUR LOGIC
});
使用Promise
语法,它看起来是这样的:
new Promise(resolve => {
GetKey(param, resolve)
})
.then(name => {
param = name
// YOUR LOGIC
})
最后,使用 async-await 方法:
var param = (
await new Promise(resolve => {
GetKey(param, resolve)
})
)
确实,您似乎在做一些奇怪的事情,这就是您首先遇到此问题的原因。
只要您使用回调,您的整个应用程序就会像异步一样运行,因为回调不会在 Node.js 的事件循环中立即执行。相反,您所在的当前函数将在GetKey
函数调用回调方法之前完成执行。