【发布时间】:2019-02-23 03:31:34
【问题描述】:
在以下代码中,在点 (A) 处调用 resolve() 不会导致执行对 createRequest() 的调用的 then() 子句。代码到达了resolve() 调用的位置,我通过 print 语句验证了这一点。
const request = require('request');
function createRequest() {
return new Promise(function(resolve, reject) {
// Setup request
// ...
request(options, function(error, response, body) {
if(!error && response.statusCode == 201) {
// If the resolve() is done at this point, the then() clause is executed
uploadFiles(files)
.then(handles => {
console.log('handles: ' + handles); // This is printed
resolve('ok'); // (A) Then clause in call to createRequest is not called
})
.catch(reject(requestObj)); // (B) I didn't have this in my initial post
}
});
});
}
function uploadFiles(files) {
return new Promise(function(resolve, reject) {
// Upload files
// ...
resolve(handles);
});
}
createRequest()
.then(message => console.log(message) /* This never executes */)
[编辑]
我在createRequest() 调用中添加了catch() 子句,我很惊讶地看到打印了一些东西,这很奇怪,因为handles: 语句正在打印。我将 (B) 更改为以下内容:
.catch(() => reject(requestObj));
我的问题解决了。对createRequest 的调用中的then() 正在被执行。不知道为什么会这样。
【问题讨论】:
-
您是否已经在其他地方致电
reject()?否则不,如果你得到handles:日志并且resolve('ok')被执行,那么then回调也会运行。 -
我会看看那个问题,但我不会在任何地方调用 reject()。
handles:打印应该意味着resolve()被执行。 -
检查
resolve变量的 agian 所有者,也许您的resolve(resolve('ok')) 与您的承诺无关。 -
@user2233706 是的,应该。当我执行你的代码时,它对我有用。鉴于您省略了一些事情,我猜罪魁祸首在其他地方。请您发布完整的实际代码吗?