gpt4 book ai didi

javascript - Promise 中的 request.post 方法跳出

转载 作者:行者123 更新时间:2023-11-28 05:40:11 24 4
gpt4 key购买 nike

各位:

最近遇到一个问题,先看一下我的代码:

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 以及另一个 promise ,例如:

   function chain() {
somePromise()
.then(bar)
.then(anotherPromise)
.then(...);
}

最后还是这样

 promiseA
.then(chain)
.then(promiseB)
.then(promiseC)

当我的代码在 bar() 中运行并深入到 foo() 时,它会发布一些内容并跳出 chain() 并直接通过 promiseBpromiseC

仅当收到响应时,代码才会返回到 responseHandler()

我尝试过类似的setTimeout()

 promiseA
.then(function(){
setTimeout(
chain(),
400
);
})
.then(promiseB)
.then(promiseC)

它确实有效,但代码在 chain() 之后停止,并且从未遇到 promiseBpromiseC

最佳答案

foo()将(立即)返回一个 promise ,它代表 future 的响应值。

如果你想等待该值变得可用,则需要使用 .then() 来等待它:

foo().then(body => { ... });

关于javascript - Promise 中的 request.post 方法跳出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38978710/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com