0

我一直在尝试围绕异步编程和 Promise 的使用。为了帮助理解它们,我编写了一些简单的嵌套代码,但遇到了障碍。

这是代码:http ://pastebin.com/hBtk9vER 确保在库时安装(npm install)

var when = require('when');

function promise() {
  console.log("Promise");
    promiseRead().then(function(string) {
    console.log("Inner promise");
    console.log(string);
    });
}

function promiseRead() {
  console.log("PromiseRead");
  return baz().then(function() {
    console.log("Inner Read");
    var deferred = when.defer();
    setTimeout(function() {
      deferred.resolve("Hello World");
    }, 5000);
  });
}

function baz() {
  console.log("BAZ");
  return when(true); 
}

promise();

我的问题是console.log(string)未定义,当我期望它"Hello World"promiseRead()解决之后。有趣的是,当我删除超时时,它按预期工作。任何人都可以帮助解释这一点,为什么promise函数promiseRead()在超时之前执行它的代码。

非常感激

4

2 回答 2

2

看起来您需要在 promiseRead() 中返回您的延迟对象

于 2014-01-16T12:14:13.710 回答
1

一些更新

var when = require('when');

function promise() {
  console.log("Promise");
    promiseRead().then(function(string) {
    console.log("Inner promise");
    console.log(string);
    });
}

function promiseRead() {
  console.log("PromiseRead");
  return baz().then(function() {
    console.log("Inner Read");
    var deferred = when.defer();
    setTimeout(function() {
      deferred.resolve("Hello World");
    }, 5000);
    return deferred.promise;
  });
}

function baz() {
  console.log("BAZ");
  return when(true); 
}

promise();
于 2014-01-16T12:32:03.723 回答