我正在尝试使用 JavaScript 在 then 函数之外访问 Promise 中的值。我是 Promise 的新手,我不确定我是否做对了。这是我的代码:
//removed code
Run Code Online (Sandbox Code Playgroud)
基本上我已经将 Promise 返回的值存储到 then 函数内的一个单独变量中。我想在后面的部分访问它们,但是当我在后面的部分打印出来时,它返回我未定义。关于如何解决这个问题的任何想法?
我找到了一些例子并遵循了它们,但它不起作用。我不确定我的代码的哪一部分是错误的。我早些时候打开了一个线程,它被标记为重复并关闭。我想我的询问不够清楚,因此我在这里重新表述这个问题。
我知道你不能让异步函数同步运行但是如何在我的promises链中添加某种顺序?
一个结果依赖于先前的promise值,当没有发生时,我得到一个未定义的错误.这是一个http请求,因此它依赖于外部因素,例如我的连接可以执行请求的速度等等.
module.exports.movieCheck = function(authToken) {
return request({
method : 'GET',
uri : 'https://graph.facebook.com/' + profileID + '/posts?fields=message&limit=25&' + authToken
}).spread(function (response, body) {
console.log('https://graph.facebook.com/' + profileID + '/posts?fields=message&limit=25&' + authToken);
return body;
}, function(e) {
console.log(e);
});
};
Run Code Online (Sandbox Code Playgroud)
我调用上面的方法如下.但是console.log返回undefined.
movieCheck.getToken()
.then(function(token) {
movieCheck.movieCheck(token);
})
.then(function(movies) {
console.log(movies); //should print json data
});
Run Code Online (Sandbox Code Playgroud)
终端打印
undefined
https://graph.facebook.com/.../posts?fields=message&limit=25&access_token=....
Run Code Online (Sandbox Code Playgroud) 我真的需要重温我的异步等待和承诺。我希望得到一些建议。
我正在对 firebase firestore 进行异步函数调用。该函数应根据单个输入参数返回一个字符串。
该功能用于 1-1 用户聊天。该功能是创建聊天/查找现有聊天,并返回其ID。
现在,我得到undefined的返回值是openChat并且不知道为什么。除了返回之外,该函数还可以正常工作。
我有两个功能。一个是 React 类组件生命周期方法,另一个是我的 firebase 异步函数。
这是类组件生命周期方法:
async getChatId(userId) {
let chatPromise = new Promise((resolve, reject) => {
resolve(openChat(userId))
})
let chatId = await chatPromise
console.log('chatId', chatId) //UNDEFINED
return chatId
}
async requestChat(userId) {
let getAChat = new Promise((resolve, reject) => {
resolve(this.getChatId(userId))
})
let result = await getAChat
console.log('result', result) //UNDEFINED
}
render() {
return (<button onClick = {() => this.requestChat(userId)}>get id</button>)
}
Run Code Online (Sandbox Code Playgroud)
这是异步函数:
// both my …Run Code Online (Sandbox Code Playgroud) 我正在使用Node AWS-SDK将文件上传到现有的S3存储桶。使用下面的代码,文件最终会上传,但似乎几次都没有返回状态代码。同样,文件成功上传后,return语句也不会执行。
码
exports.create = function(req, res) {
var stream = fs.createReadStream(req.file.path);
var params = {
Bucket: 'aws bucket',
Key: req.file.filename,
Body: stream,
ContentLength: req.file.size,
ContentType: 'audio/mp3'
};
var s3upload = s3.upload(params, options).promise();
s3upload
.then(function(data) {
console.log(data);
return res.sendStatus(201);
})
.catch(function(err) {
return handleError(err);
});
}Run Code Online (Sandbox Code Playgroud)
日志
POST /api/v0/episode/upload - - ms - -
POST /api/v0/episode/upload - - ms - -
{ Location: 'https://krazykidsradio.s3-us-west-2.amazonaws.com/Parlez-vous%2BFrancais.mp3',
Bucket: 'krazykidsradio',
Key: 'Parlez-vous+Francais.mp3',
ETag: '"f3ecd67cf9ce17a7792ba3adaee93638-11"' }Run Code Online (Sandbox Code Playgroud)
javascript ×4
promise ×3
node.js ×2
amazon-s3 ×1
async-await ×1
bluebird ×1
firebase ×1
reactjs ×1