[英]request.post method in a Promise jump out
球员:
最近我想出了一个问题,让我们先看看我的代码:
var foo = function () {
var promise = new Promise(function (resolve, reject) {
request.post(
someAddress,
{ form: someData },
function (error, res, body) {
responseHandler(error, res, body, resolve, reject);
});
});
return promise;
};
function responseHandler(error, res, body,resolve,reject) {
if (error || res.statusCode != 200) {
try {
if (res) {
error = error || { error: res.statusMessage };
error.statusCode = res.statusCode || 204;
reject(error);
}
else {
reject({
statusCode: 204,
message: 'Unspecified Error'
});
}
}
catch (ex) {
reject(ex);
}
}
else {
try {
resolve(body ? JSON.parse(body) : '')
}
catch (ex) {
reject(ex);
}
}
}
所以这是我的代码。 当它运行到request.post
,它会跳出foo。
这个问题是由我编码错误造成的还是我遗漏了什么?
我希望它留下并等待响应,以便我可以运行foo()
,我该怎么办?
实际上,整个代码将是:
function bar() {
var promise = new Promise(function(resolve, reject) {
foo().then(doSth and resolve);
})
return promise;
}
然后我用bar
的地方与其他承诺,如:
function chain() {
somePromise()
.then(bar)
.then(anotherPromise)
.then(...);
}
最后它随之而来
promiseA
.then(chain)
.then(promiseB)
.then(promiseC)
当我的代码在bar()
运行并潜入foo()
,它会发布一些东西并跳出chain()
并直接通过promiseB
和promiseC
。
只有在收到响应时,代码才会返回到responseHandler()
。
我试过像setTimeout()
一样
promiseA
.then(function(){
setTimeout(
chain(),
400
);
})
.then(promiseB)
.then(promiseC)
它确实有效,但代码在chain()
之后停止,并且永远不会遇到promiseB
和promiseC
。
foo()
将(立即)返回一个promise,它表示未来的响应值。
如果要等待值可用,则需要使用.then()
等待它:
foo().then(body => { ... });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.