Promise跳出中的request.post方法
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 => { ... });
相关文章:
- node js post request.body undefined
- curl post request jquery equivalent
- 如何在 jquery post request 中发送api_key和api_secret参数
- Angular 2:HTTP Post Request,带有URL参数和正文类型参数
- 如何使用包含选项的request.js发出POST请求
- Ajax request Post Params
- 无法读取属性'用户名'对于Angular Post Request,共个未定义
- jQuery POST Ajax request
- jQuery - 在 post request 中传递数组
- 如何在 NodeJS 中传递响应参数,包括来自 POST http.request 的正文
- 在 AJAX post request 中使用自定义 HttpServletRequest 过滤器
- 没有来自 OpenLayers.Request.Post 的 XMLDocument
- HTTP post request - AngularJS 和 JQuery 之间的区别
- React Native Post Request via Fetch throws Network Request F
- 用请求承诺替换节点request.post
- Dojo.request.post-返回的promise说"拒绝”;,但服务器似乎已经接受了请求
- return request method = GET but i send request = POST (ajax)
- AngularJS Http Post Error: Unexpected request: POST
- Promise跳出中的request.post方法
- 如何对多个键使用request.POST.get()