【发布时间】:2018-03-02 16:49:30
【问题描述】:
我已经阅读了以下堆栈溢出post 和this one,但我仍然找不到解决问题的方法。
我在 utility.js 文件中定义了如下函数:
let geocodeOptions = {
provider: 'google',
httpAdapter: 'https',
apiKey: 'GMAPKEY_HERE',
formatter: null
};
async function postInformation(message, bot) {
try {
let messageContent = message.content;
let EncId = await getDetails(messageContent), msg
const NodeGeocoder = require('node-geocoder');
geocoder = NodeGeocoder(geocodeOptions);
geocoder.reverse({ lat: EncId[0], lon: EncId[1] }).then(res => {
msg = "*" + res[0]['city'] + "*";
})
let post;
let delayValue = await Bluebird.delay(2000)
if (delayValue) {
post = getMsg1() + '\n' + getMsg2() + '\n' + EncId;
return await post
}
} catch (error) {
console.log(error)
}
}
在主文件中,我这样称呼它:
const util = require('./utility')
util.postInformation(message, client).then(value => {
console.log("value from main file")
console.log(value) // Always prints undefined
})
我也尝试了以下方法:
let value = await util.postInformation(message, client);
console.log("value from main file")
console.log(value) // Always prints undefined
请提供解决此问题的方法,而不是重定向到其他帖子,我在这里犯的错误在哪里。
【问题讨论】:
-
erm
return await post?不...只是return post(我假设getMsg1和getMsg2是同步的) -
读取 documentation for Bluebird.delay ... 返回一个承诺,该承诺将在给定 ms 毫秒后以值(或未定义)解决) - 好吧,因为您没有传入
.delay的值,它实际上 确实 解析为未定义 - 因此,您的if始终为 false -
@JaromandaX 我指定了延迟,
2000,是的,它们是同步的 -
是的,你已经指定了延迟,但没有第二个参数......因此,delayValue 将始终为
undefined- 它在文档中这么说......为什么2秒延迟?你认为delayValue可能是什么?对或错?是什么让它成真?是什么让它错了? -
或者,更简单地说.. 2 秒延迟的目的是什么?
标签: javascript node.js asynchronous