Javascript 承诺跳出中的request.post方法
伙计们: 最近我遇到了一个问题,让我们先看看我的代码:Javascript 承诺跳出中的request.post方法,javascript,node.js,promise,es6-promise,Javascript,Node.js,Promise,Es6 Promise,伙计们: 最近我遇到了一个问题,让我们先看看我的代码: var foo = function () { var promise = new Promise(function (resolve, reject) { request.post( someAddress, { form: someData }, function (error, res, body) {
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()
将(立即)返回一个表示未来响应值的承诺
如果要等待值变为可用,则需要使用等待该值。然后()
:
foo()
将(立即)返回表示未来响应值的承诺
如果要等待值变为可用,则需要使用等待该值。然后()
:
您收到了什么错误?这不是一个错误,只是它没有按照我认为应该的方式运行。@Bwaxxlochain
也需要返回一个承诺(return somePromise()…
)。@Cyper这是因为setTimeout
作为一个函数不会返回任何承诺。所以,promiseB
只是从promiseA
@bwaxlo中得到了未定义的信息,我明白了。。。这就是为什么setTimeout
不起作用的原因!谢谢您收到了什么错误?这不是一个错误,只是它没有按照我认为应该的方式运行。@Bwaxxlochain
也需要返回一个承诺(return somePromise()…
)。@Cyper这是因为setTimeout
作为一个函数不会返回任何承诺。所以,promiseB
只是从promiseA
@bwaxlo中得到了未定义的信息,我明白了。。。这就是为什么setTimeout
不起作用的原因!谢谢我在另一个函数中使用了afterfoo()
中的.then()
,它似乎不起作用。我在另一个函数中使用了afterfoo()
中的.then()
,它似乎不起作用。
foo().then(body => { ... });