【发布时间】:2015-04-19 01:19:34
【问题描述】:
几天前我进入了 Promises 的奇妙世界,我只是觉得自己开悟了。 Promise 看起来很简单,但它们可能会令人困惑。
你能告诉我为什么下面的测试没有通过吗?
var Promise = require('bluebird');
var expect = require('chai').expect;
var request = Promise.promisifyAll(require('request'));
describe('Promise', function() {
it('should work again', function() {
var final_result;
function first_promise() {
return new Promise(function(resolve, reject) {
resolve("http://www.google.com");
})
}
function second_promise() {
return new Promise(function(resolve, reject) {
resolve("This is second promise!");
})
}
function inner_async_request(url_from_first_promise) {
return new Promise(function(resolve, reject) {
return request.getAsync(url_from_first_promise).spread(function(response, content) {
final_result = content;
resolve(content);
})
})
}
return request.getAsync('http://127.0.0.1:3000/').spread(function(result, content) {
//do something with content and then return first_promise
console.log(content);
return first_promise;
})
.then(function(url) {
inner_async_request(url).then(function(result) {
console.log(result);
final_result = result;
})
return second_promise;
})
.then(function(result) {
// result should be "This is second promise!"
console.log(result);
// final_result should be google's html
expect(final_result).not.to.be.undefined;
})
});
});
目前的错误是:Unhandled rejection Error: options.uri is a required argument 我猜应该是从first_promise 收到的?
实际上,通过这个测试,我想了解如何使用相互依赖的 Promise 以及如何将 Promise 用作 Promise 中的异步函数——它们应该单独工作——。
谢谢
【问题讨论】:
-
您是否在实际代码中调用
first_promise?返回时您仍然需要致电first_promise。 -
感谢Bergi的推荐!我看过你的那个帖子,但不能好,现在我明白了。但还不是最好的。更好:)
标签: javascript node.js asynchronous promise bluebird